Python3 sqlite3立即开始错误

Python3 sqlite3立即开始错误,python,python-3.x,sqlite,Python,Python 3.x,Sqlite,我有一些以前可以使用的代码,但是在Windows上升级到Python 3.6.0之后,我遇到了一些错误。我可以确认,同样的代码在Python 3.5.2中运行良好。我将问题缩小到以下非常简单的代码中,在这些代码中,我试图显式地在数据库上设置writer锁: >>> import sqlite3 >>> conn = sqlite3.connect('testDB.db') >>> cur = conn.cursor() >>>

我有一些以前可以使用的代码,但是在Windows上升级到Python 3.6.0之后,我遇到了一些错误。我可以确认,同样的代码在Python 3.5.2中运行良好。我将问题缩小到以下非常简单的代码中,在这些代码中,我试图显式地在数据库上设置writer锁:

>>> 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
导入sqlite3 >>>conn=sqlite3.connect('testDB.db') >>>cur=连接光标() >>>康涅狄格州 假的 >>>cur.execute('立即开始') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 sqlite3.OperationalError:无法在事务中启动事务 同样的代码在Python 3.5.2中没有问题:

>>> cur.execute('BEGIN IMMEDIATE')
<sqlite3.Cursor object at 0xb710ab60>
当前执行('立即开始') 我试图使用
conn=sqlite3.connect('testDB.db',isolation\u level='IMMEDIATE')
但没有成功。请注意,我没有执行任何事务,例如插入或甚至选择

更新: 我注意到Python上有以下内容:

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


这意味着什么?如何修复代码,以便仍然可以显式锁定数据库?

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


如果您想自己处理事务,必须通过将
isolation\u level
设置为
None

来防止Python自己处理事务,这是一个bug。它将在Python 3.6.1中修复:

Python版本是否相同?无论如何,请阅读.Good catch,在Windows上,python版本已从3.6.0降级到3.5.2,代码运行良好。我在文档中注意到了这一点:“在版本3.6中发生了更改:sqlite3用于在DDL语句之前隐式提交打开的事务。现在不再是这种情况。”但是,我不完全理解这意味着什么,也不知道如何修复它。如果我运行conn,它会给我错误的消息。这似乎有效。我没有意识到
isolation\u level=''
isolation\u level=None
不同,谢谢你指出这一点。我想使用X.X.0版本总是有风险的。应该等待service pack:)