使用SQLite与WAL

sdnqo3pr  于 2023-10-23  发布在  SQLite
关注(0)|答案(2)|浏览(160)

我一直在遵循SQLite tutorial上的Python文档,并设法创建了一个Employee表并对其进行写入。

import sqlite3
    
conn = sqlite3.connect('employee.db')
c = conn.cursor()
    
firstname = "Ann Marie"
lastname = "Smith"
email = "[email protected]"
    
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。

mbjcgjjk

mbjcgjjk1#

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')
mv1qrgav

mv1qrgav2#

PRAGMA journal_mode文档说:
如果无法更改日记模式,则返回原始日记模式。[...]
还请注意,当事务处于活动状态时,无法更改journal_mode。
因此,您必须确保数据库库不会试图聪明地自动启动事务。

相关问题