Pertanyaan tentang MySQL daripada Python Menghasilkan Data Identical
Menyiasat pangkalan data MySQL daripada Python untuk mendapatkan semula data dinamik menimbulkan cabaran. Adalah diketahui bahawa hanya mengulangi pertanyaan dalam gelung tidak mencukupi untuk mengambil data baharu daripada pangkalan data.
Kod yang anda berikan menunjukkan isu ini:
<code class="python">for i in range(listSize): #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #...</code>
Walaupun dengan percubaan menggunakan fetchall , fetchmany dan fetchone, keputusan tetap tidak berubah.
Penyelesaian: Melakukan Sambungan
Untuk menyelesaikannya, setiap pelaksanaan pertanyaan mesti diikuti dengan komitmen sambungan. Tindakan ini menamatkan transaksi yang sedang berjalan dan memulakan transaksi baharu, membolehkan pertanyaan seterusnya mengesan perubahan yang dibuat semasa transaksi sebelumnya.
<code class="python">while True: #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #... mydb.commit() #...</code>
Tahap Pengasingan dan Lalai BACA YANG BOLEH DIULANG
Konsep ini berakar pada tahap pengasingan. Secara lalai, MySQL menggunakan REPEATABLE READ untuk InnoDB. Ini menunjukkan bahawa dalam urus niaga, bacaan seterusnya akan mengekalkan syot kilat yang ditetapkan oleh bacaan awal transaksi. Oleh itu, tanpa melakukan, pertanyaan berikutnya tidak akan menangkap sebarang perubahan.
Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL Python Saya Terus Mengembalikan Data Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!