Python 是否显式检查SQL插入操作是否成功?

Python 是否显式检查SQL插入操作是否成功?,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我正在使用Python与使用psycopg2的Postgres DBMS对话 假设一个INSERT返回时没有引发异常,那么该INSERT确实在数据库中存储了一些新的内容,这安全吗 现在,我一直在检查数据库游标的“rowcount”属性,如果是0,则表示插入失败。然而,我开始认为这是没有必要的。在这里发现了类似的问题 他们似乎使用行计数方法来检查数据是否正确插入。默认情况下,postgres将返回None,以便成功插入: cursor.execute-该方法返回None。如果执行了查询,则可以使用

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

假设一个INSERT返回时没有引发异常,那么该INSERT确实在数据库中存储了一些新的内容,这安全吗


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

在这里发现了类似的问题


他们似乎使用行计数方法来检查数据是否正确插入。

默认情况下,
postgres
将返回
None
,以便成功插入:

cursor.execute
-该方法返回
None
。如果执行了查询,则可以使用fetch*()方法检索返回的值

如果您想了解有关插入的信息,一个简单/有效的选项是使用
返回
(它采用与
选择相同的选项):

如果INSERT返回时没有引发 异常,那么该INSERT实际上在 数据库

没有

在以下情况下,受影响的记录计数将为零:

  • 您已将
    插入到。。。选择…
    ,查询不返回任何行
  • 您已将
    插入到。。。在发生冲突时,不执行任何操作
    ,它会遇到冲突
  • 您的表上有一个
    BEFORE INSERT
    ,返回的
    NULL
  • 您定义了一个不会导致任何记录受到影响的记录(例如,
    …不执行任何操作
(…甚至可能更多,尽管我没有想到。)

常见的情况是,如果您以某种方式告诉它,它只会影响零记录。您是否希望将其中任何一个视为“失败”在很大程度上取决于您的应用程序逻辑


任何明确的“失败”(约束冲突、序列化失败、磁盘空间不足……)都会引发错误,因此通常不需要检查记录计数。

好吧:试试。向插入中添加一些无效数据,看看会发生什么。您发布的答案是针对SQL Server,而不是PostgreSQL。他说他正在使用rowcount。有更好的方法(插入后在游标上使用fetchone[0])
INSERT INTO ... RETURNING id