【问题标题】:How do I lock an entire SQLite connection (locked read + locked write)?如何锁定整个 SQLite 连接(锁定读取 + 锁定写入)?
【发布时间】:2016-10-28 05:31:46
【问题描述】:

我有一个同时访问的 sqlite3 数据库。我有 ClientA 读取某个表的状态(Column1 有行 ABC)并且需要用新的字母表。如果ClientBClientA 更新表之前读取表的状态(比如使用新字母D),那么两个客户端都可以(在我的情况下这样做) 将 D 写入表格 - 这样 Column1 变为 ABCDD。但我需要确保 Column1 只有唯一的字母!

如何锁定 db 连接,使其读写操作获得独占访问权限,以便 Column1 不会在其他读写周期之间意外更改状态?

很难在网上找到任何关于“锁定 SQLite 读取”的信息,因为似乎每个人都对解锁数据库更感兴趣。下面好像没有给con的读操作exclusive access

con = sqlite3.connect(db, isolation_level='EXCLUSIVE', timeout=10)

相关:

【问题讨论】:

    标签: python multithreading sqlite python-multithreading


    【解决方案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()
    

    【讨论】:

    • 这很有用,尽管我认为我对这种野兽的一般方法很糟糕(例如,现在我的整个脚本在我获得一个数据库锁的那一刻就失败了)。如果您有时间,我会很感激您查看the rest of the story here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多