gpt4 book ai didi

Python3 sqlite3 BEGIN IMMEDIATE错误

转载 作者:行者123 更新时间:2023-12-01 03:21:09 26 4
gpt4 key购买 nike

我有一些代码曾经可以工作,但是在 Windows 上升级到 Python 3.6.0 后,我遇到了错误。我可以确认相同的代码在 Python 3.5.2 中运行得很好。我将问题范围缩小到以下非常简单的代码,在其中我试图显式地在数据库上设置写入器锁定:

>>> import sqlite3
>>> conn = sqlite3.connect('testDB.db')
>>> cur = conn.cursor()
>>> conn.in_transaction
False
>>> cur.execute('BEGIN IMMEDIATE')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: cannot start a transaction within a transaction

相同的代码在 Python 3.5.2 上没有问题:

>>> cur.execute('BEGIN IMMEDIATE')
<sqlite3.Cursor object at 0xb710ab60>

我尝试使用conn = sqlite3.connect('testDB.db',isolation_level='IMMEDIATE')但没有成功。请注意,我没有执行任何事务,例如 INSERT 甚至 SELECT。

更新:我在 Python sqlite3 documentation 上注意到以下内容:

“版本 3.6 中进行了更改:sqlite3 过去常常在 DDL 语句之前隐式提交打开的事务。现在不再是这种情况了。”

这是什么意思以及如何修复我的代码以便我仍然可以显式锁定数据库?

最佳答案

如果您想使用Python的自动事务处理,请留下isolation_level为其默认值,或将其设置为三个级别之一。

如果您想执行自己的事务处理,则必须通过将 isolation_level 设置为 None 来阻止 Python 执行自己的事务处理。

关于Python3 sqlite3 BEGIN IMMEDIATE错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41915603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com