2009-09-18 10 views
0

Je reçois une erreur lorsque j'essaie d'insérer un enregistrement dans sqlite en utilisant python.Ne pas insérer un enregistrement dans sqlite en utilisant python

Ceci est mon code:

import sqlite3 

db = sqlite3.connect('mydb') 

ins_str = 'insert into filer_filer(number, ms_date, ms_time, mp_code, Amount, recipient_name,recipient_number, Tran_date, Tran_time, balance, userid_id) values ('752098','09/09/16','17:54:19','K79NN251','5,000',' GWENDA WULFRIC','416','11/9/09','4:23 PM','396', -1)' 

try: 
    db.execute(ins_str) 
except: 
    db.close() 

... 

J'obtiens l'erreur suivante

str: Traceback (le plus récent appel dernier): fichier « C: \ eclipse \ plugins \ org.python.pydev .debug_1.4.8.2881 \ pysrc \ pydevd_vars.py », à la ligne 340, en EvaluateExpression

result = eval(expression, updated_globals, frame.f_locals) 

File "", ligne 1

except 
    ^

SyntaxError: EOF inattendu lors de l'analyse

Gath

Modifier

Ma nouvelle instruction d'insertion ressemble à ceci

"insert into filer_filer(number, sms_date, sms_time, mp_code, Amount, recipient_name,recipient_number, Tran_date, Tran_time, balance, userid_id) values ('+254722752098','09/09/16','17:54:19','K79NN251','5,000',' GEOFFREY NZIOKA','254720425416','11/9/09','4:23 PM','396', -1)" 
+0

-1: Le code - comme indiqué - ne peut pas produire l'erreur indiquée. Veuillez fermer cette question et publier le code réel sous la forme d'une nouvelle question. –

Répondre

1

Il peut être un artefact de l'affichage du bloc de code de SO mais vous semblez manquer des guillemets autour des valeurs de chaîne SQL.

Si tel est le cas, vous pouvez résoudre le problème en utilisant simplement des guillemets doubles pour la variable ins_str.

Modifier: Mon explication était source de confusion. Je m'excuse si je vous ai induit en erreur. Maintenant, plus en détail:

Les littéraux de chaînes de caractères Python peuvent utiliser des guillemets doubles; les affectations suivantes sont équivalentes. La syntaxe SQL (sans rapport avec Python) requiert des guillemets simples (pas de choix) pour ses variables de type chaîne. C'est donc une bonne idée d'utiliser des guillemets doubles pour la chaîne Python elle-même, car les guillemets simples pour le contenu SQL n'interféreront pas.

Vous pouvez donc l'utiliser (comme suggéré par Alex, je seconde ce choix aussi)

ins_str = "insert into filer_filer(number, ms_date, ms_time, mp_code, Amount, recipient_name,recipient_number, Tran_date, Tran_time, balance, userid_id) values ('752098','09/09/16','17:54:19','K79NN251','5,000',' GWENDA WULFRIC','416','11/9/09','4:23 PM','396', -1)" 

ou vous devriez par ailleurs utiliser deux guillemets simples pour chaque citation avant et après les variables SQL. Avoir deux guillemets simples est une séquence d'échappement, interprétée comme une seule citation au sein de la chaîne par Python.

ins_str = 'insert into blah, blah.... values(''752098'', ''09/09/16'', etc... ' 
+0

Événement celui-ci, échoue aussi !!! insérer dans filer_filer (numéro, ms_date, ms_time, mp_code, montant, nom du destinataire, numéro du destinataire, date de transfert, heure de transition, solde, id_utilisateur) valeurs ("752098", "09/09/16", "17:54:19", "K79NN251", "5000", "GWENDA WULFRIC", "416", "09/11/09", "4:23 PM", "396", -1) – gath

1

Dans l'affectation à ins_str, vous semblez utiliser les guillemets simples de manière incorrecte: une au début, l'autre après values ( et juste avant 752098, et ainsi de suite, et ainsi de suite. Vous semblez utiliser Eclipse (même si vous ne le mentionnez pas, les messages d'erreur le suggèrent), donc l'erreur que vous obtenez lorsque le plug-in Eclipse essaye de donner un sens à cette syntaxe est particulière, mais Python proprement dit vous donner un bon vieux SyntaxError - tout ce que vous pensez que vous faites avec cette utilisation de guillemets simples, ça ne va pas fonctionner.Qu'en est-il de l'utilisation de double guillemets plutôt que des guillemets simples, " au lieu de ', au début et à la fin de la chaîne, afin que les guillemets simples à l'intérieur soient conservés et transmis à sqlite ...?

+0

j'ai supprimé les citations de début et de fin (i les a placés là pour le test), a remplacé le guillemet simple avec le double mais toujours j'obtiens l'erreur ... – gath

+0

Hve vous avez spécifiquement essayé l'inser "ins_str =" dans filer_filer (nombre, ms_date, ms_time, mp_code, montant, recipient_name, recipient_number, Tran_date, Tran_time, balance, userid_id) valeurs ('752098', '09/09/16', '17:54:19', 'K79NN251', '5000', 'GWENDA WULFRIC', '416', '11/9/09 ',' 4:23 PM ',' 396 ', -1) "? C'est ce que je disais, et ce n'est pas ce que vous dites que vous avez fait. –

+0

Oui ont essayé, toujours pas de chance. – gath

0

Etes-vous sûr que vous obtenez la même erreur? Sauf si vous avez également modifié votre schéma, votre nouvelle instruction d'insertion échouera simplement parce que les champs "sms_date" et "sms_time" doivent être "ms_date" et "ms_time". Pourrait aider si vous nous montrer yor schéma que vous pouvez faire à partir de la ligne de commande par:

sqlite3 mydb '.schema filer_filer'

0

Désolé les gars, je l'ai fixé !, il y avait une erreur de faute de frappe sur mon code- excute au lieu de exécuter;

Mon code d'origine ressemblait à ce

try: 
    db.excute(ins_str) # Notice the typo on the method execute. written as excute instead of execute 
except: 
    db.close() 

merci.

Questions connexes