簡體   English   中英

如何使用MySQLdb創建跨Python多個語句的事務?

[英]How do you create a transaction that spans multiple statements in Python with MySQLdb?

我知道在InnoDB表中,事務是自動提交的,但是我知道這意味着單條語句嗎? 例如,我想檢查用戶是否存在於表中,如果不存在,則創建它。 但是,這里存在比賽條件。 我相信在執行選擇之前使用事務將確保在后續插入和提交事務之前,該表保持不變。 如何使用MySQLdb和Python做到這一點?

存在一個SELECT ... FOR UPDATE,它允許您鎖定行以免其他事務讀取,但我認為記錄必須首先存在。 然后,您可以按照自己的意願進行操作,並在提交后將其解鎖。

在您的情況下,我認為最好的方法是簡單地對用戶名設置唯一約束,然后嘗試插入。 如果遇到關鍵異常​​,則可以通知用戶該名稱已被使用。

從理論上講,您可以禁用自動提交 ,即執行Python的DB API中定義的兩階段提交事務 在野外使用該功能似乎有點困難。 SQLAlchemy 似乎包括對MySQL的支持 ,因此是可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM