透過 Django 在 Python 中使用 MySQL 預存程序時,可能會出現涉及指令同步的問題。當嘗試在交易中執行多個語句時,這可能表現為可怕的「命令不同步;您現在無法執行此命令」錯誤。
預設情況下,遊標在多次執行中維護狀態資訊。呼叫預存程序時,遊標會移動到交易內的不同位置。試圖從遊標的初始位置開始執行後續的 SQL 語句會導致錯誤。
要解決該問題,需要關閉遊標並在執行任何其他語句之前重新打開它。呼叫 fetchall() 後可以立即關閉遊標,而不影響結果集。
cursor.close() cursor = connection.cursor()
這有效地重置了遊標的位置並允許執行下一條 SQL 語句。需要注意的是,關閉原始遊標物件後不應再使用它。
考慮以下程式碼片段:
cursor.callproc('my_mysql_procedure', [some_id,]) result = cursor.fetchall() cursor.close() cursor = connection.cursor() cursor.execute("select * from some_table") result = cursor.fetchall()
在這種情況下,在fetchall()之後呼叫cursor.close()可以確保遊標的狀態被重置,並且後續的execute()語句可以成功執行。
以上是Python MySQL:如何修復預存程序呼叫中的「指令不同步」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!