Python から MySQL に対するクエリで同一のデータが生成される
動的データを取得するために Python から MySQL データベースに繰り返しクエリを実行すると、課題が生じます。データベースから新しいデータをフェッチするには、ループ内のクエリを単に反復処理するだけでは不十分であることが知られています。
提供されたコードは、この問題の例です。
<code class="python">for i in range(listSize): #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #...</code>
fetchall を使用した試みでも、fetchmany、および fetchone を実行すると、結果は停滞したままになります。
解決策: 接続のコミット
これを解決するには、各クエリの実行の後に、繋がり。このアクションにより進行中のトランザクションが終了し、新しいトランザクションが開始され、後続のクエリで前のトランザクション中に行われた変更を検出できるようになります。
<code class="python">while True: #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #... mydb.commit() #...</code>
分離レベルと REPEATABLE READ デフォルト
この概念は分離レベルに根ざしています。デフォルトでは、MySQL は InnoDB に REPEATABLE READ を採用します。これは、トランザクション内で、後続の読み取りでは、トランザクションの最初の読み取りによって確立されたスナップショットが保持されることを意味します。したがって、コミットしないと、後続のクエリでは変更がキャプチャされません。
以上がPython MySQL クエリが同じデータを返し続けるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。