为什么IronPython不支持SQLite3的预写日志,即使它的SQLite版本应该如此?

时间:2015-05-26 23:22:03

标签: python sqlite ironpython

我试图通过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)的错误。

1 个答案:

答案 0 :(得分:0)

PRAGMA journal_mode documentation说:

  

如果无法更改日记帐模式,则返回原始日记帐模式。 [...]
  另请注意,事务处于活动状态时无法更改journal_mode。

因此,您必须确保databsae库不会尝试变得聪明并自动启动事务。

但是,这不会阻止打开WAL数据库 可以从SQLite库中remove WAL support。 显然,这是由您的数据库驱动程序出于某种原因完成的;如果你想使用WAL,你必须使用任何其他SQLite驱动程序。