【发布时间】:2017-11-10 14:58:29
【问题描述】:
在给定的数据库连接中关闭自动提交模式时遇到问题。根据我从 sqlite3 模块文档中了解到的情况,下面的 python 代码不应该引发任何 AssertionError 异常,但确实如此。
表“nomes”已存在于数据库中并包含列“Nome”
import sqlite3
_PATH_DB = '/rhome/FNORO/tabelao/sofia.sqlite' # path to database
_ISOLATION_LEVEL = "EXCLUSIVE"
_TEST_NAME = "TEST1"
# delete name from database
with sqlite3.connect(_PATH_DB, isolation_level = _ISOLATION_LEVEL) as conn:
query = 'DELETE FROM nomes WHERE nome = "{}"'.format(_TEST_NAME)
conn.execute(query)
conn.commit()
# insert name _TEST_NAME without executing conn.commit()
with sqlite3.connect(_PATH_DB, isolation_level = _ISOLATION_LEVEL) as conn:
query = 'INSERT INTO nomes(nome) VALUES("{}")'.format(_TEST_NAME)
conn.execute(query)
# check if name already existis
with sqlite3.connect(_PATH_DB, isolation_level = _ISOLATION_LEVEL) as conn:
query = 'SELECT nome FROM nomes WHERE nome = "{}"'.format(_TEST_NAME)
res = conn.execute(query).fetchall()
assert (res == [])
Sqlite3 文档在这里:https://docs.python.org/2/library/sqlite3.html#connection-objects
isolation_level获取或设置当前的隔离级别。对于自动提交模式或“DEFERRED”、“IMMEDIATE”或“EXCLUSIVE”之一,无。有关更详细的说明,请参阅控制事务部分。
我在这里错过了什么?
【问题讨论】:
标签: python python-3.x sqlite autocommit