簡體   English   中英

確定sqlite3數據庫是否為只讀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM