gpt4 book ai didi

python - 显式检查 SQL INSERT 操作是否成功是不必要的吗?

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:53 25 4
gpt4 key购买 nike

我正在使用 Python 与使用 psycopg2 的 Postgres DBMS 对话。

是否可以安全地假设如果 INSERT 返回而没有引发异常,那么该 INSERT 实际上确实在数据库中存储了一些新内容?

现在,我一直在检查数据库游标的“rowcount”属性,如果它为 0,则表示 INSERT 失败。但是,我开始认为这是没有必要的。

最佳答案

Is it safe to assume that if an INSERT returns without raising an exception, then that INSERT actually did store something new in the database?

没有。

如果出现以下情况,受影响的记录数将为零:

  • 您运行了一个INSERT INTO ... SELECT ...,查询没有返回任何行
  • 您运行了一个INSERT INTO ... ON CONFLICT DO NOTHING,它遇到了冲突
  • 您有一个BEFORE INSERT trigger在你的 table 上,还有 trigger function返回 NULL
  • 你有一个 rule定义不会影响任何记录(例如 ... DO INSTEAD NOTHING)

(……可能还有更多,虽然什么都没有想到。)

共同点是,如果您告诉它,它只会影响零条记录,无论是哪种方式。您是否要将其中任何一个视为“失败”在很大程度上取决于您的应用程序逻辑。

任何明确的“失败”(违反约束、序列化失败、磁盘空间不足...)都应该抛出错误,因此通常不需要检查记录计数。

关于python - 显式检查 SQL INSERT 操作是否成功是不必要的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874445/

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