gpt4 book ai didi

python - Postgres : cursor. 执行 ("COMMIT") 与 connection.commit()

转载 作者:行者123 更新时间:2023-11-28 18:43:25 26 4
gpt4 key购买 nike

我正在运行 postgres 9.2 服务器并有一个使用 psycopg 2.5 的 python 客户端。

我进行了一些测试,因为我在日志文件中遇到了很多警告:没有正在进行的事务条目。

我有一些代码可以简化为:

import psycopg2

connection = psycopg2.connect(...)
with connection.cursor() as cursor:
# Multiple insert statements
cursor.execute("INSERT INTO ...")

cursor.execute("COMMIT")

我发现,如果我执行以下操作,一旦第一个 COMMIT 运行(我重用相同的连接,所以上面的代码运行多次)之后的每个语句都会立即提交.但是,如果我改为运行 connection.commit(),它会按预期工作(到目前为止提交的语句,以后的语句不会自动提交)。

这是一个 bug 还是我在某处遗漏了一些细微的区别?这是一个 postgres 问题还是与 psycopg2 的内部结构有关?

提前致谢!

最佳答案

是的,有一个不太好的区别(记录在 DBAPI PEP 和 psycopg 文档中)。当通过连接发出第一条 SQL 语句时,所有 Python DBAPI 兼容的适配器都会隐式启动一个事务。那么你不应该直接执行回滚/提交,而是使用 connection 对象上可用的方法。

如果您想进行自己的事务管理,只需将连接置于自动提交模式,然后发送您自己的 BEGIN,然后是其他语句,并以通常的 COMMIT 或 ROLLBACK 结束。

关于python - Postgres : cursor. 执行 ("COMMIT") 与 connection.commit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23496497/

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