ホームページ >データベース >mysql チュートリアル >MySQL クエリを繰り返しても最新のデータが返されないのはなぜですか?

MySQL クエリを繰り返しても最新のデータが返されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 03:10:021031ブラウズ

Why Are My Repeated MySQL Queries Not Returning the Latest Data?

MySQL クエリを繰り返しても最新のデータが返されない: トランザクション コミットによる問題の解決

Python では、急速に変化する MySQL データベースに繰り返しクエリを実行しながら、各クエリが最新のデータを確実に取得することが重要です。ただし、データベースが変更されているにもかかわらず、後続のクエリが同じデータを返すという問題が発生する場合があります。これは、データベース接続の基礎となる分離レベルによるものです。

分離レベルの概念は、トランザクションが互いにどのように分離されるかを決定します。 MySQL のデフォルトの分離レベルである REPEATABLE READ の場合、同じトランザクション内の各クエリは、トランザクションの開始時に取得されたデータベースのスナップショットに依存します。これは、後続のクエリには、トランザクションがアクティブな間に行われたデータベースの変更が反映されないことを意味します。

この問題を解決するには、各クエリの後に接続をコミットすることが不可欠です。これにより、新しいトランザクションが開始され、次のクエリが最新のデータベース スナップショットで動作するようになります。以下に例を示します。

<code class="python">while True:
    # SQL query
    sql = "SELECT * FROM table"

    # Read the database, store as a dictionary
    mycursor = mydb.cursor(dictionary=True)
    mycursor.execute(sql)

    # Store data in rows
    myresult = mycursor.fetchall()

    # Transfer data into list
    for row in myresult:
        myList[int(row["rowID"])] = (row["a"], row["b"], row["c"])

        print(myList[int(row["rowID"])])

    # Commit !
    mydb.commit()
    print("---")
    sleep (0.1)</code>

各クエリの後にコミットすることで、接続は新しいトランザクションを確立し、後続の各クエリで最新のデータベース スナップショットが確実に読み取られるようになり、それによって最新のデータベースの変更が反映されます。これにより、クエリが繰り返されて常に古いデータが返されるという問題が解決されます。

以上がMySQL クエリを繰り返しても最新のデータが返されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。