确定sqlite3数据库是否为只读

时间:2017-06-22 05:58:29

标签: python sqlite

我想打开一个sqlite3数据库,并立即检查它是否以只读方式打开。因为我知道我需要写入它,所以我希望在启动时立即返回错误,而不必等到程序第一次尝试写入的时候。

我看到有一个sqlite3 C API function sqlite3_db_readonly()。是否可以从Python API访问此功能?或者是否有其他方法可以检查数据库是否只能从Python API读取?

2 个答案:

答案 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)); }`