ホームページ >データベース >mysql チュートリアル >Python MySQL の更新がデータベースに反映されないのはなぜですか?
MySQL および Python データベース更新の問題のトラブルシューティング
Python を使用して MySQL データベース内のデータを更新しようとすると、開発者は変更が加えられた状況に遭遇する可能性があります。 Python コードを介して直接クエリを実行しても、データベースには反映されません。この記事では、この問題を調査し、考えられる解決策を提供します。
問題の説明
ユーザーが説明したように、MySQLdb を使用してデータベース行を更新するプログラムは、持続的に変化します。このコードは更新クエリを実行しますが、コマンド ライン インターフェイス (CLI) を介してデータベースを検査すると、更新が観察されません。
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()
ソリューション
この問題は、MySQLdb のデフォルトのトランザクション処理に起因します。デフォルトでは、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") # Commit the changes to the database conn.commit() 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()
conn.commit() を使用すると、変更がデータベースにコミットされ、後続のクエリが確実に実行されます。更新された値が反映されます。
以上がPython MySQL の更新がデータベースに反映されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。