2016-12-06 149 views
0

我試圖從Python對SQLite數據庫執行查詢。問題是,我沒有對數據庫文件的寫入權限,也沒有對包含數據庫文件的目錄的訪問權限。打開沒有寫入權限的sqlite3數據庫

當我連接到數據庫,然後執行SELECT查詢,我得到一個「無法打開數據庫文件」的錯誤。我試着按照建議this answer,但它沒有奏效。我猜SQLite嘗試創建鎖定文件時失敗。

當我有到目錄的寫權限,而不是sqlite的文件,我得到另一個錯誤 - 鎖定的錯誤。這是因爲sqlite創建shm和wal文件具有與db文件相同的權限,這意味着我得到shm和wal文件,我無法寫入,導致鎖定錯誤。

以外的所有文件複製到一個目錄下我有完全訪問,有沒有解決這個另一種方式?

回答

-1

您可以打開閱讀模式與下面的語法sqlite3連接:

con = sqlite3.connect('file:path/to/database.sqlite?mode=ro', uri=True) 
+0

這是我已經引用的答案。這是行不通的。連接可能處於只讀模式,但文件和目錄需要可寫。 – zmbq

2

documentation說:

這是不可能打開只讀WAL數據庫。對於與數據庫關聯的「-shm」wal-index共享內存文件(如果該文件存在),打開過程必須具有寫入權限;否則,如果「-shm」文件不存在,則可以在包含數據庫文件的目錄上寫入訪問權限。

要允許只讀訪問該數據庫,某些具有寫入權限的用戶需要將其更改爲其他journal mode

+0

如果我有對該文件夾的寫入權限並且沒有對該文件的寫入權限,則會創建-shm文件,但我沒有寫入權限(sqlite只是複製數據庫文件的權限)。這是一個錯誤,我想知道它是Python包裝器還是sqlite本身的錯誤。 – zmbq

相關問題