打开sqlite3数据库,没有写访问权限

时间:2016-12-06 10:14:33

标签: python sqlite permissions

我试图从Python对SQLite数据库执行查询。问题是,我没有对数据库文件的写访问权,也没有包含数据库文件的目录。

当我连接到数据库并执行SELECT查询时,我得到一个"无法打开数据库文件"错误。我尝试遵循建议this answer,但它没有奏效。我猜SQLite在尝试创建锁文件时失败了。

当我对目录有写入权限但没有对sqlite文件进行写入访问时,我收到另一个错误 - 锁定错误。这是因为sqlite创建了与db文件具有相同权限的shm和wal文件,这意味着我得到了无法写入的shm和wal文件,从而导致锁定错误。

除了将所有文件复制到我确实拥有完全访问权限的目录之外,还有另外一种解决方法吗?

2 个答案:

答案 0 :(得分:2)

documentation说:

  

无法打开只读WAL数据库。如果该文件存在,则打开过程必须具有与数据库关联的“-shm”wal-index共享内存文件的写权限,如果“-shm”文件不存在,则必须对包含数据库文件的目录具有写访问权限。

要允许对该数据库进行只读访问,某些具有写入权限的用户需要将其更改为其他journal mode

答案 1 :(得分:-1)

您可以使用以下语法在读取模式下打开sqlite3连接:

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