MySQL と Python によるデータベース更新のトラブルシューティング
この問題は、Python の MySQLdb ライブラリを使用して MySQL データベースを更新するときに発生します。次のコードが実行されています:
import MySQLdb conn=MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname") cursor=conn.cursor() cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100") cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100") results = cursor.fetchall() for row in results: print row[0] print "Number of rows updated: %d" % cursor.rowcount cursor.close() conn.close()
このコードを実行すると、成功したように見え、データベースが更新されたことが示されます。ただし、その後、MySQL コマンド ライン インターフェイスからクエリを実行すると、更新が適用されていないことがわかります。
原因
問題は、コミット操作がないことにあります。 MySQLdb はデフォルトでトランザクションを有効にし、更新を永続化するには明示的なコミットを必要とします。コミットしないと、変更はデータベースに保存されません。
解決策
これを解決するには、以下に示すように、接続を閉じる前に conn.commit() をインクルードします。
import MySQLdb conn=MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname") cursor=conn.cursor() cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100") cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100") results = cursor.fetchall() for row in results: print row[0] print "Number of rows updated: %d" % cursor.rowcount **conn.commit()** # Commit changes to database cursor.close() conn.close()
conn.commit() を組み込むことにより、データベースに加えられた変更は正常に永続化されます。
以上がPython を使用した MySQL データベースの更新がデータベースに反映されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。