确定SQLite3数据库是否仅读取



我想打开一个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)

最新更新