将 SQLite 与 WAL 结合使用

6 python sqlite

我一直在关注有关SQLite 教程的 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()
Run Code Online (Sandbox Code Playgroud)

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

我注意到使用 SQLite 的 Firefox 以这种方式锁定文件,如果您在使用 Firefox 时尝试删除 SQLite 文件,它将失败,并显示“文件已打开或正在使用”(或类似的内容),我该如何实现这?我在 Windows 10 下运行 Python。

Isa*_*aac 8

conn = sqlite3.connect('app.db', isolation_level=None)
Run Code Online (Sandbox Code Playgroud)

将日志模式设置为 WAL:

conn.execute('pragma journal_mode=wal')
Run Code Online (Sandbox Code Playgroud)

或者另一种方式(仅展示如何关闭 wal 模式)

cur = conn.cursor()
cur.execute('pragma journal_mode=DELETE')
Run Code Online (Sandbox Code Playgroud)


CL.*_*CL. -1

PRAGMA Journal_mode 文档说:

\n\n
\n

如果无法更改日志模式,则返回原始日志模式。[\xe2\x80\xa6]
\n 另请注意,当事务处于活动状态时,journal_mode 无法更改。

\n
\n\n

所以你要保证数据库库不会自作聪明,自动启动一个事务

\n

  • 您能否提供一个示例来说明如何通过 SQLite 和 Python 启用和使用 WAL? (2认同)