lad*_*ini 12 python database sqlite
我想用python-sqlite3打开铬站点数据(在〜/ .config/chromium/Default中),但是当chrome运行时它会被锁定,这是可以理解的,因为可以进行交易.有没有办法以只读模式打开它,确保在使用它时我不能破坏数据库的完整性?
Val*_*Val 10
看来我们可以通过以模式打开数据库来绕过锁immutable,例如:
sqlite3 'file:places.sqlite?immutable=1'
Run Code Online (Sandbox Code Playgroud)
正如这里所解释的https://www.sqlite.org/c3ref/open.html
如果底层数据库文件发生更改,或者显然没有看到对文件进行的更新,这可能会导致查询错误,但我发现在每个新查询上重新打开连接有助于解决此问题。
要使用大多数 SQLite 驱动程序实现相同的目标,因为我们无法直接设置SQLITE_IOCAP_IMMUTABLE,最好的方法是使用标志打开连接SQLITE_OPEN_READONLY | SQLITE_OPEN_URI以允许将file:...?immutable=1URI 作为传递filename。
我认为这取决于交易设置的锁定.
http://www.sqlite.org/lockingv3.html#shared_lock http://www.sqlite.org/lang_transaction.html
SQLite独占事务锁定读取和写入,其中立即和延迟事务仍将允许读者.
所以它真的取决于Chromium使用的交易.
Chromium 长时间持有数据库锁?糟糕!这真的不是一个很好的主意。不过,不是你的错……
您可以尝试只复制数据库文件(例如,使用系统实用程序cp)并使用该快照进行读取;SQLite 将所有提交的状态保存在每个数据库的单个文件中。是的,有可能会看到部分事务,但是在 Unix 上您绝对不会遇到锁定问题,因为 SQLite 绝对不使用强制锁定。(由于那里的锁定方案不同,这在 Windows 上很可能不起作用。)
| 归档时间: |
|
| 查看次数: |
4866 次 |
| 最近记录: |