python的sqlite3中create table和transaction的问题

iur*_*adz 5 python sqlite

我正在学习通过 sqlite3 在 python 中使用 sqlite。

应该在关闭连接之前调用插入、更新支持事务和 commit() 等 SQL 操作,否则数据库中不会发生任何变化。但是,“创建表”不支持事务,或者创建表是自动提交的。例如,

con.execute('create table xxx (xxxx)')
Run Code Online (Sandbox Code Playgroud)

该表将立即创建。更重要的是,如果我们在创建表之前执行插入语句,而没有 commit()。然后执行创建表,插入将被提交,以及'创建表'。

我在文档https://docs.python.org/2/library/sqlite3.html#sqlite3-typeshttps://www.python.org/dev/peps/pep-0249/# 中没有发现任何有关此类行为的内容id3https://sqlite.org/atomiccommit.html

我的问题是: 1. 有没有其他操作像这样?2. 其他 DBMS 的行为是什么?3. 有没有这方面的规范?

CL.*_*CL. 3

这种行为既不是来自 SQLite(像 CREATE TABLE 这样的命令在事务内部工作得很好),也不是来自 Python;这是 Pythonsqlite3模块试图变得聪明并在某些地方插入自动事务。

\n\n

这是有记录的,但给出的理由相当站不住脚:

\n\n
\n

这样做有两个原因。首先,其中一些命令不能在事务中工作。

\n
\n\n

如果模块不会自动启动事务,则不需要在这些命令之前关闭它们。

\n\n
\n

另一个原因是 sqlite3 需要跟踪事务状态(事务是否处于活动状态)。

\n
\n\n

如果模块不会自动启动事务,则不需要跟踪事务状态

\n\n

请注意,DML 语句的检测并非在所有情况下都能正常工作。

\n\n

我建议通过清除来禁用所有这些疯狂的行为isolation_level

\n