我想打开一个sqlite3数据库,并立即检查它是否以只读方式打开。因为我知道我需要写入它,所以我希望在启动时立即返回错误,而不必等到程序第一次尝试写入的时候。
我看到有一个sqlite3 C API function sqlite3_db_readonly()
。是否可以从Python API访问此功能?或者是否有其他方法可以检查数据库是否只能从Python API读取?
答案 0 :(得分:3)
除了提到的其他可能性之外,您可以尝试写入它。例如,如果数据库的user_version
为0(除非您对其进行了更改,否则将为{}),请发出pragma user_version=0;
。如果数据库是可写的,这将不起作用,但如果数据库是只读的,则会导致错误。
答案 1 :(得分:2)
no和yes.see查看python标准库sqlite3的源代码。
rc = sqlite3_open_v2(database, &self->db,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
(uri ? SQLITE_OPEN_URI : 0), NULL);
这意味着即使你没有设置uri
,当文件处于只读模式时它将以只读模式打开。并且在代码中搜索。这里没有调用{ {1}}。所以你不能通过库sqlite3来做到这一点。
但是,还有其他库,例如APSW。代码
sqlite3_db_readonly()
然后阅读DOC,只需致电`static PyObject*
Connection_readonly(Connection *self, PyObject *name)
{
int res=-1;
res=sqlite3_db_readonly(self->db, PyBytes_AS_STRING(utf8name));
}`