Apabila bekerja dengan prosedur tersimpan MySQL dalam Python melalui Django, isu boleh timbul yang melibatkan penyegerakan arahan. Ini boleh nyata sebagai ralat "perintah tidak segerak; anda tidak boleh menjalankan perintah ini sekarang" apabila cuba melaksanakan berbilang kenyataan dalam transaksi.
Secara lalai, kursor mengekalkan maklumat keadaan merentas pelbagai pelaksanaan. Apabila memanggil prosedur tersimpan, kursor bergerak ke kedudukan yang berbeza dalam transaksi. Mencuba untuk melaksanakan pernyataan SQL berikutnya dari kedudukan awal kursor akan mengakibatkan ralat.
Untuk menyelesaikan isu, adalah perlu untuk menutup kursor dan buka semula sebelum melaksanakan sebarang kenyataan tambahan. Kursor boleh ditutup serta-merta selepas memanggil fetchall() tanpa menjejaskan set hasil.
cursor.close() cursor = connection.cursor()
Ini secara berkesan menetapkan semula kedudukan kursor dan membolehkan pelaksanaan pernyataan SQL seterusnya. Adalah penting untuk ambil perhatian bahawa objek kursor asal tidak boleh digunakan lagi selepas menutupnya.
Pertimbangkan coretan kod berikut:
cursor.callproc('my_mysql_procedure', [some_id,]) result = cursor.fetchall() cursor.close() cursor = connection.cursor() cursor.execute("select * from some_table") result = cursor.fetchall()
Dalam kes ini , memanggil cursor.close() selepas fetchall() memastikan bahawa keadaan kursor ditetapkan semula dan execute() seterusnya kenyataan boleh dilaksanakan dengan jayanya.
Atas ialah kandungan terperinci Python MySQL: Bagaimana untuk Membetulkan Ralat \'Arahan Tidak Segerak\' dalam Panggilan Prosedur Tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!