我想打开一个sqlite3数据库,并立即检查它不被读取。由于我知道我需要写信,所以我想在启动时立即返回错误,而不必等到程序首次尝试写作的时间。
我看到有一个SQLITE3 C API函数sqlite3_db_readonly()
。是否可以从Python API访问此功能?还是有其他方法可以检查数据库是否是从Python API读取的?
除了提到的其他可能性外,您可以尝试写入它。例如,如果数据库的user_version
为0(除非您已更改它,否则它将是pragma user_version=0;
。如果数据库可写,这将没有效果,但是如果数据库仅读取,则会导致错误。
否,是。请参阅Python标准库SQLITE的源代码3。
rc = sqlite3_open_v2(database, &self->db,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
(uri ? SQLITE_OPEN_URI : 0), NULL);
这意味着即使您没有设置uri
,它也将在只读模式的文件时以读取模式打开,并且在代码中搜索。没有调用sqlite3_db_readonly()
。由库sqlite3。
但是,是的,还有其他库,用于extpleapsw。代码
`static PyObject*
Connection_readonly(Connection *self, PyObject *name)
{
int res=-1;
res=sqlite3_db_readonly(self->db, PyBytes_AS_STRING(utf8name));
}`
然后阅读文档,只需致电Connection.readonly(name)