Python 中以只读模式打开 sqlite3 数据库

50

在使用 C/C++ 调用 sqlite3 时,我了解到它有一个只读打开模式选项,非常方便避免数据意外损坏。Python 的绑定库中是否也有类似的选项?


可能是重复的问题:https://dev59.com/E1LTa4cB1Zd3GeqPWxDG - Chris
1
@Chris 谢谢,我会撰写一个答案,以便为将来有同样问题的人节省一些工作。 - dsign
4个回答

77

从Python 3.4.0开始,您可以使用以下方式以只读模式打开数据库:

db = sqlite3.connect('file:/path/to/database?mode=ro', uri=True)

另请参见文档


3
对于相对路径,不需要前导的 / 符号,例如:file:folder/db.sqlite3?mode=ro - philshem

17

Python 2.x 的解决方案:

fd = os.open(filename, os.O_RDONLY)
c = sqlite3.connect('/dev/fd/%d' % fd)
os.close(fd)

不是POSIX标准,但在Linux、OS/X和大多数现代Unix系统上可用。


这个能和 'with' 语句结合使用吗? - Arco Bast

14

有点相关的是,注意你可以使用 pragma 动态地启用/禁用修改:

pragma query_only = ON;   -- disable changes
pragma query_only = OFF;  -- enable changes

5

根据@Chris提供的链接,不支持。但是还有另一个对sqlite3进行了包装的库,它不太符合PEP 249标准,但更紧密地封装了sqlite3,并吸收了引擎的新功能:https://github.com/rogerbinns/apsw。该库支持以只读模式打开数据库,还有其他便利功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接