我有一个同时访问的sqlite3数据库。我有ClientA
读取某个表的状态(Column1有行 A , B , C )并且需要更新表与新的字母表。如果ClientB
在ClientA
更新表格之前读取了表格的状态(比如新的字母 D ),那么两个客户都可能(&和在我的情况下做)将 D 写入表格 - 这样Column1变为 A , B , C , D , D 。但我需要确保Column1只有唯一的字母!
如何锁定数据库连接以使其读写操作获得独占访问权限,以便Column1不会在其他读写周期之间意外更改状态?
很难找到任何关于"锁定sqlite读取的信息"在线,因为每个人似乎都更有兴趣解锁数据库。以下似乎不会给con
的阅读操作exclusive access
con = sqlite3.connect(db, isolation_level='EXCLUSIVE', timeout=10)
相关:
答案 0 :(得分:1)
仅设置隔离级别是不够的。您还必须将您的专有陈述放在交易中:
con = sqlite3.connect(db, isolation_level='EXCLUSIVE', timeout=10)
con.execute('BEGIN EXCLUSIVE')
# Exclusive access here; no other transaction can access the database.
# 1. Check for presence of letter
# 2. Add the letter if it doesn't exist
con.commit()
con.close()