使用Sqlite和WAL

时间:2017-11-12 14:56:59

标签: python sqlite

我一直关注SQLite tutorial上的Python文档,我设法创建了一个Employee表并写入了它。

import sqlite3

conn = sqlite3.connect('employee.db')
c = conn.cursor()

firstname = "Ann Marie"
lastname = "Smith"
email = "ams@cia.com"

employee = (email, firstname, lastname)

c.execute('INSERT INTO Employee Values (?,?,?)', employee)
conn.commit()

# Print the table contents
for row in c.execute("select * from Employee"):
    print(row)

conn.close()

我一直在阅读Write-Ahead Logging,但我找不到解释如何实施它的教程。有人可以提供一个例子吗?

我注意到使用SQLite的Firefox会以这样的方式锁定文件:如果您在使用Firefox时尝试删除sqlite文件,它将无法说"文件已打开或正在使用"(或类似的东西),我该如何实现?我在Windows 10下运行Python。

2 个答案:

答案 0 :(得分:0)

PRAGMA journal_mode documentation说:

  

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

因此,您必须确保数据库库不会变得聪明且automatically starts a transaction

答案 1 :(得分:0)

conn = sqlite3.connect('app.db', isolation_level=None)

将日志模式设置为 WAL:

conn.execute('pragma journal_mode=wal')

或者其他方式(只是展示如何关闭wal模式)

cur = conn.cursor()
cur.execute('pragma journal_mode=DELETE')
相关问题