Python から MySQL にクエリを実行すると同一のデータが生成される
動的データを取得するために Python から MySQL データベースに繰り返しクエリを実行すると、問題が発生します。データベースから新しいデータを取得するには、ループ内のクエリを単に反復処理するだけでは十分ではないことが知られています。
提供されたコードは、この問題の例です。
for i in range(listSize):
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
fetchall、fetchmany、fetchone を使用して試みても、結果は停滞したままです。
解決策: 接続のコミット
これを解決するには、各クエリの実行の後に接続をコミットする必要があります。このアクションにより、進行中のトランザクションが終了し、新しいトランザクションが開始され、後続のクエリで前のトランザクション中に行われた変更を検出できるようになります。
while True:
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
mydb.commit()
#...
分離レベルと REPEATABLE READ デフォルト
この概念は分離レベルに根ざしています。デフォルトでは、MySQL は InnoDB に REPEATABLE READ を採用します。これは、トランザクション内で、後続の読み取りでは、トランザクションの最初の読み取りによって確立されたスナップショットが保持されることを意味します。したがって、コミットしないと、後続のクエリでは変更がキャプチャされません。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3