2011-01-30 6 views
4

Question: Pourquoi cette instruction sqlite3 ne met-elle pas à jour l'enregistrement?Mise à jour de python sqlite3 non mise à jour


Info:

cur.execute('UPDATE workunits SET Completed=1 AND Returns=(?) WHERE PID=(?) AND Args=(?)',(pickle.dumps(Ret),PID,Args)) 

J'utilise python et sqlite3. cette déclaration ne jette pas une erreur, il semble juste qu'elle soit ignorée. pour des raisons de test j'ai inclus ci-dessous:

cur.execute('SELECT * FROM workunits WHERE PID=(?) AND Args=(?)',(PID,Args)) 

Qui renvoie un enregistrement très bien. mais l'enregistrement ne date pas avec la nouvelle valeur du ret pickled. il reste toi ''. Je ne peux pas comprendre pourquoi. ma déclaration where semble fonctionner. ma syntaxe semble correcte car il n'y a pas d'erreur. Je ne sais pas pourquoi exactement cela ne fonctionne pas.

Répondre

8

N'utilisez pas 'AND', utilisez un ','.

cur.execute('UPDATE workunits SET Completed=1, Returns=? WHERE PID=? AND Args=?', 
    (pickle.dumps(Ret), PID, Args) 
) 
+1

merci de terminer mon tourment. – Narcolapser

+0

De rien. Pour les points bonus, essayez de comprendre ce que votre déclaration fait et pourquoi ce n'est pas une erreur. – Harmen

12

Si le problème persiste après avoir corrigé votre syntaxe. Veuillez vous assurer que vous utilisez:

conn.commit() 

Après cur.execute, UPDATES et INSERTS nécessitent COMMIT.

Questions connexes