11

我查看了文档,但没有找到任何东西可以让我知道我通过 cursor.execute("...") 执行的最后一个命令是否成功。

我期待像“1 行受影响”这样的回复。

4

2 回答 2

14

这是一个老问题,但检查操作是否成功的一种方法psycopg2是在rowcount语句之​​后查看光标的属性。此属性返回受最后一条execute语句影响的行数。

例如

connection = psycopg2.connect(dbname="foo",user="postgres")
cur = connection.cursor()
cur.execute("INSERT INTO foo VALUES (%s, %s)", (1,2))
cur.rowcount # returns 1
cur.execute("SELECT * FROM foo")
cur.rowcount # returns 0

一个类似的属性是statusmessage,它返回一个字符串,包括最后执行的操作的类型以及受影响的行数。

于 2016-03-22T04:45:03.003 回答
3

我希望会出现某种异常
如果一切正常 - 错误代码是00000并且不会出现异常。

以防万一,create table您可以随时仔细检查

try:
    cur.execute("SELECT ouch FROM aargh;")
except Exception, e:
    pass

errorcodes.lookup(e.pgcode[:2])
# 'CLASS_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION'
errorcodes.lookup(e.pgcode)
# 'UNDEFINED_TABLE'
于 2012-02-10T03:38:03.630 回答