10

私はPythonとPythonのMySQLアダプターを初めて使用します。ここで明らかな何かが欠けているかどうかはわかりません:

db = MySQLdb.connect(# db details omitted)
cursor = self.db.cursor()

# WORKS
cursor.execute("SELECT site_id FROM users WHERE username=%s", (username))
record = cursor.fetchone()

# DOES NOT SEEM TO WORK
cursor.execute("DELETE FROM users WHERE username=%s", (username))

何か案は?

4

4 に答える 4

12

トランザクションをサポートするストレージエンジン(InnoDBなど)を使用していると思いますがdb.commit()、DELETEの後には呼び出しません。コミットしない場合、DELETEの効果は破棄されます。

http://mysql-python.sourceforge.net/FAQ.html#my-data-disappeared-or-won-t-go-awayを参照してください:

1.2.0以降、MySQLdbは、DB-API標準(PEP-249)で要求されているように、デフォルトで自動コミットを無効にします。InnoDBテーブルまたは他のタイプのトランザクションテーブルタイプを使用している場合は、接続を閉じる前にconnection.commit()を実行する必要があります。そうしないと、変更がデータベースに書き込まれません。

この同様のSOの質問も参照してください: PythonMySQLdb更新クエリが失敗する

于 2009-09-20T20:14:52.610 に答える
1

おそらく、外部キー制約に違反しています。

于 2009-09-22T01:22:50.973 に答える
0

上記のコードに、への呼び出しを追加するだけself.db.commit()です。

この機能は煩わしいものではありません。

クエリにエラーがある場合のデータ破損の問題からあなたを救います。

于 2009-09-21T22:11:48.717 に答える
0

問題は、変更をコミットしていないことである可能性があります。それはによって行うことができます conn.commit()

詳しくはこちらをご覧ください

于 2012-11-02T06:14:42.320 に答える