Opening sqlite3 database from python in read-only mode
Question:
While using sqlite3 from C/C++ I learned that it has a open-in-read-only mode option, which is very handy to avoid accidental data-corruption. Is there such a thing in the Python binding?
Answers:
As by the link given by @Chris, no. But there is another wrapper for sqlite3, which is less PEP 249-compliant and that wraps sqlite3 more tightly, assimilating new features of the engine: https://github.com/rogerbinns/apsw. That wrapper does support opening the database in read-only mode, plus other niceties.
As of Python 3.4.0 you can open the database in read only mode with the following:
db = sqlite3.connect('file:/path/to/database?mode=ro', uri=True)
Also see the documentation.
Workaround for Python 2.x:
fd = os.open(filename, os.O_RDONLY)
c = sqlite3.connect('/dev/fd/%d' % fd)
os.close(fd)
Not posix, but available on Linux, OS/X and most modern unixes.
Somewhat related, note that you can enable/disable modifications dynamically with a pragma:
pragma query_only = ON; -- disable changes
pragma query_only = OFF; -- enable changes
While using sqlite3 from C/C++ I learned that it has a open-in-read-only mode option, which is very handy to avoid accidental data-corruption. Is there such a thing in the Python binding?
As by the link given by @Chris, no. But there is another wrapper for sqlite3, which is less PEP 249-compliant and that wraps sqlite3 more tightly, assimilating new features of the engine: https://github.com/rogerbinns/apsw. That wrapper does support opening the database in read-only mode, plus other niceties.
As of Python 3.4.0 you can open the database in read only mode with the following:
db = sqlite3.connect('file:/path/to/database?mode=ro', uri=True)
Also see the documentation.
Workaround for Python 2.x:
fd = os.open(filename, os.O_RDONLY)
c = sqlite3.connect('/dev/fd/%d' % fd)
os.close(fd)
Not posix, but available on Linux, OS/X and most modern unixes.
Somewhat related, note that you can enable/disable modifications dynamically with a pragma:
pragma query_only = ON; -- disable changes
pragma query_only = OFF; -- enable changes