web-dev-qa-db-fra.com

Comment supprimer un enregistrement de la table?

J'ai un problème avec la suppression d'un enregistrement de ma base de données SQLite3:

conn = sqlite3.connect('databaza.db')
c = conn.cursor()
data3 = str(input('Please enter name: '))
mydata = c.execute('DELETE FROM Zoznam WHERE Name=?', (data3,))
conn.commit()
c.close

Tout est OK, pas d'erreur, mais la fonction de suppression ne fonctionne pas!

Est-ce que quelqu'un a une idée?

16
Risino

La syntaxe correcte pour une requête paramétrisée est la suivante:

mydata = c.execute("DELETE FROM Zoznam WHERE Name=?", (data3,))

Assurez-vous que le paramètre utilise la virgule pour en faire un tuple en python.

Cela aidera à prévenir l'injection SQL, ce qui est possible lors de la transmission d'une chaîne formatée. En savoir plus sur l'injection SQL ici

Related post ici .

14
Cameron Gagnon

Je suis un peu en retard pour la fête, mais si vous effectuez une recherche dans Google "python sqlite delete row", c’est la première chose qui se présente et j’ai eu le même problème: les choses ne sont pas effacées de ma base de données SQLite. ____.] J'utilise Python 2.7 sur Debian Jessie.

Auparavant, lorsque j’écrivais du code Python pour l’ajout et la récupération d’informations dans la base de données sqlite, j’écrivais les commandes avec la casse correcte, si nécessaire, et cela fonctionnait. 

curs.execute("SELECT example_column1 FROM example_table WHERE example_column2=(?)", (Variable,))

Toutefois...

curs.execute("DELETE FROM example_table WHERE example_column1=(?)", (Variable,)):

Cela pour une raison quelconque ne fonctionne pas avec la commande DELETE. Je devais envoyer cette commande en minuscule pour que sqlite respecte la commande envoyée.

conn=sqlite3.connect('example.db')
curs=conn.cursor()
curs.execute("delete from example_table where example_column=(?)", (Variable,))
conn.commit()
conn.close()

Je ne sais pas pourquoi. J'ai essayé toutes les méthodes mentionnées précédemment, mais le seul moyen de le faire fonctionner était d'envoyer la commande en minuscule. J'espère que cela aidera les néophytes en difficulté dans leur cheminement vers Python et sqlite.

0
Dregnox

Essayez avec:

mydata = c.execute('DELETE FROM Zoznam WHERE Name = (?)', (data3))

Sans le ',' et le '?' entre '()'

0