如何在Python中通过SQLite3以只读模式打开数据库?
实现SQLite3只读连接的两种可行方案
方案1:使用SQLite内置常量设置只读标志
Python的sqlite3模块里没有RO这个属性,你需要用官方定义的SQLITE_OPEN_READONLY常量来设置只读模式,示例代码如下:
import sqlite3 with sqlite3.connect('bazanata.db', flags=sqlite3.SQLITE_OPEN_READONLY) as conn: cursor = conn.cursor() cursor.execute("SELECT name FROM users") # 尝试执行写操作(如INSERT/UPDATE)会直接报错,达到只读限制效果
方案2:通过URI连接字符串指定只读模式
如果你习惯用URI模式连接数据库,可以在连接字符串中添加mode=ro参数,记得开启uri=True:
import sqlite3 with sqlite3.connect('file:bazanata.db?mode=ro', uri=True) as conn: cursor = conn.cursor() cursor.execute("SELECT name FROM users") # 同样,写操作会被拦截报错
注意事项
- 两种方式都能实现只读限制,一旦连接处于只读模式,所有写操作(INSERT/UPDATE/DELETE等)都会抛出
OperationalError异常,刚好满足你限制部分函数为只读的需求。 - 确保你的Python版本支持这些参数(Python 3.4+对URI模式的支持已经很完善,
SQLITE_OPEN_READONLY常量则是长期存在的)。
内容的提问来源于stack exchange,提问作者PaulOeuf
相关产品推荐
相关产品推荐

