web-dev-qa-db-ja.com

テーブルからレコードを削除する方法は?

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

エラーはありませんが、削除機能は機能しません!

誰かがアイデアを持っていますか?

18
Risino

parameterized クエリの正しい構文は次のとおりです。

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

python Tupleにするために、パラメーターがコンマを使用していることを確認してください。

これは、フォーマットされた文字列を渡すときに起こり得るSQLインジェクションを防ぐのに役立ちます。 SQLインジェクションの詳細 ここ

関連記事 こちら

17
Cameron Gagnon

試してください:

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

「、」と「?」がない場合の間に '()'

私はパーティーに少し遅れますが、Google検索で「python sqlite delete row」を検索すると、これが最初に表示され、sqlite DBからDELETEされないという同じ問題が発生していました。 Debian JessieでPython 2.7を使用しています。

以前は、sqliteデータベースに情報を追加および取得するためのPythonコードを記述したとき、必要に応じて大文字と小文字を正しく指定してコマンドを記述し、それが機能しました。

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

しかしながら...

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

これは、何らかの理由でDELETEコマンドでは機能しません。 sqliteが送信されるコマンドを尊重する前に、そのコマンドをすべて小文字で送信する必要がありました。

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

なぜか分かりません。私は前述の方法をすべて試しましたが、コマンドを小文字で送信することがそれを機能させる唯一の方法でした。これが、Pythonおよびsqliteへの旅で苦労している初心者に役立つことを願っています。

0
Dregnox