Открытие базы данных sqlite3 из python в режиме только для чтения

При использовании sqlite3 из C/С++ я узнал, что у него есть опция режима open-in-read-only, что очень удобно, чтобы избежать случайного повреждения данных. Есть ли такая вещь в связывании Python?

Ответы

Ответ 1

Как по ссылке, приведенной @Chris, нет. Но есть еще одна оболочка для sqlite3, которая меньше совместима с PEP 249 и которая более тесно обтекает sqlite3, ассимилируя новые возможности движка: http://code.google.com/p/apsw/. Эта оболочка поддерживает открытие базы данных в режиме только для чтения, а также другие тонкости.

Ответ 2

Начиная с Python 3.4.0 вы можете открыть базу данных в режиме только для чтения со следующим:

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

Также см. документацию.

Ответ 3

Обходной путь для Python 2.x:

fd = os.open(filename, os.O_RDONLY)
c = sqlite3.connect('/dev/fd/%d' % fd)
os.close(fd)

Не posix, но доступно для Linux, OS/X и самых современных unixes.