zmbq
zmbq

Reputation: 39023

Opening sqlite3 database with no write access

I'm trying to perform queries on an SQLite database from Python. Problem is, I do not have write access to the database file, and also not to the directory containing the database file.

When I connect to the database and perform a SELECT query I get an "Unable to open database file" error. I tried following the advice this answer, but it didn't work. I guess SQLite fails when trying to create the lock files.

When I have write access to the directory, but not to the sqlite file, I get another error - a locking error. This is because sqlite creates the shm and wal files with the same permissions as the db file, meaning I get shm and wal files I can't write to, resulting in a locking error.

Other than copying all files to a directory I do have full access to, is there another way around this?

Upvotes: 0

Views: 3532

Answers (2)

CL.
CL.

Reputation: 180182

The documentation says:

It is not possible to open read-only WAL databases. The opening process must have write privileges for "-shm" wal-index shared memory file associated with the database, if that file exists, or else write access on the directory containing the database file if the "-shm" file does not exist.

To allow read-only access to that database, some user with write permissions needs to change it to some other journal mode.

Upvotes: 2

Martinbaste
Martinbaste

Reputation: 416

You can open a sqlite3 connection in read mode with the following syntax:

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

Upvotes: 0

Related Questions