Dalam skrip Python, adalah penting untuk kerap menanyakan pangkalan data MySQL untuk menangkap data dinamik. Apabila bergantung pada gelung untuk mendapatkan data sedemikian, ia boleh mengelirukan untuk mendapati bahawa pengambilan berikutnya mengembalikan hasil yang sama.
Dalam skrip Python yang diberikan, gelung digunakan untuk melaksanakan MySQL berulang kali pertanyaan dan simpan keputusan dalam senarai:
<code class="python">for i in range(listSize): # ... # SQL query sql = "SELECT * FROM table" # ...</code>
Walaupun jangkaan bahawa gelung akan menyegarkan semula data yang diambil daripada pangkalan data pada setiap lelaran, skrip mendapatkan semula hasil yang sama berulang kali.
Isu utama isu ini terletak pada tahap pengasingan transaksi MySQL. Secara lalai, InnoDB, enjin storan yang digunakan oleh MySQL, beroperasi di bawah tahap pengasingan READ COMMITTED, yang memastikan perkara berikut:
"Bacaan konsisten dalam urus niaga yang sama baca syot kilat yang ditetapkan oleh bacaan pertama."
Ini bermakna pertanyaan seterusnya dalam urus niaga mendapatkan semula data seperti yang wujud semasa transaksi dimulakan. Untuk menangani perkara ini, setiap lelaran gelung mesti berakhir dengan perintah mydb.commit().
<code class="python">import ... # ... while True: # ... # SQL query sql = "SELECT * FROM table" # ... mydb.commit()</code>
Dengan melakukan sambungan, skrip memaksa pangkalan data untuk menangkap perubahan yang dibuat semasa transaksi, memastikan yang berikutnya pertanyaan mencerminkan keadaan semasa pangkalan data.
Setiap lelaran gelung dalam sambungan MySQL dianggap sebagai transaksi berasingan, yang secara lalai dibaca daripada syot kilat yang konsisten. Melakukan sambungan pada penghujung setiap lelaran memastikan transaksi seterusnya membaca petikan terbaharu, mencerminkan perubahan yang dibuat dalam transaksi sebelumnya.
Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL Berulang dalam Python Mengembalikan Hasil Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!