我试图通过IronPython脚本将SQLite数据库的journal_mode设置为wal(预写日志记录)。
IronPython的安装版本是
IronPython 2.7 2.7.5.0 on .NET 4.0.30319.18444
它使用的SQLite版本是3.7.7,通过运行print sqlite3.sqlite_version
获得。
在version 3.7.0的SQLite中添加了WAL支持,为什么这个脚本无法运行?
如果我执行pragma journal_mode=wal;
,我只会收到delete
的回复。
如果我尝试打开已设置为WAL的数据库,则会收到_sqlite3.DatabaseError: file is encrypted or is not a database (wal format detected)
的错误。
答案 0 :(得分:0)
PRAGMA journal_mode documentation说:
如果无法更改日记帐模式,则返回原始日记帐模式。 [...]
另请注意,事务处于活动状态时无法更改journal_mode。
因此,您必须确保databsae库不会尝试变得聪明并自动启动事务。
但是,这不会阻止打开WAL数据库 可以从SQLite库中remove WAL support。 显然,这是由您的数据库驱动程序出于某种原因完成的;如果你想使用WAL,你必须使用任何其他SQLite驱动程序。