[英]Determine if an sqlite3 database is read-only
我想打開一個sqlite3數據庫,並立即檢查它是否未以只讀方式打開。 因為我知道我需要寫它,所以我想在啟動時立即返回一個錯誤,而不必等到以后程序首次嘗試進行寫操作時再返回一個錯誤。
我看到有一個sqlite3 C API函數sqlite3_db_readonly()
。 是否可以從Python API訪問此函數? 還是有其他方法可以檢查數據庫是否是Python API中的只讀數據庫?
除了提到的其他可能性之外,您可以嘗試對其進行寫操作。 例如,如果數據庫的user_version
為0(除非已更改,否則它將為0),則發出pragma user_version=0;
否則,發出pragma user_version=0;
。 如果數據庫是可寫的,這將無效,但如果數據庫是只讀的,則將導致錯誤。
否和是。請參閱python標准庫sqlite3的源代碼。
rc = sqlite3_open_v2(database, &self->db,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
(uri ? SQLITE_OPEN_URI : 0), NULL);
這意味着即使您沒有設置uri
,當文件處於只讀模式時,它也會以只讀模式打開。然后在代碼中進行搜索。不會調用sqlite3_db_readonly()
。庫sqlite3。
但是是的,還有其他庫,例如APSW。代碼
`static PyObject*
Connection_readonly(Connection *self, PyObject *name)
{
int res=-1;
res=sqlite3_db_readonly(self->db, PyBytes_AS_STRING(utf8name));
}`
然后讀取DOC,只需調用Connection.readonly(name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.