gpt4 book ai didi

python - 关于python的sqlite3中create table and transaction的问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:16 27 4
gpt4 key购买 nike

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

插入、更新等SQL操作支持事务,commit()应该在关闭连接前调用,否则数据库不会有任何改变。但是,'create table' 不支持事务,或者create table 是自动提交的。例如,

con.execute('create table xxx (xxxx)')

该表将立即创建。更有什者,如果我们在创建表之前执行插入语句,而没有使用 commit()。然后执行 create table,将提交插入,以及 'create table'。

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

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

最佳答案

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

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

There are two reasons for doing that. The first is that some of these commands don’t work within transactions.

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

The other reason is that sqlite3 needs to keep track of the transaction state (if a transaction is active or not).

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

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

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

关于python - 关于python的sqlite3中create table and transaction的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760997/

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