如何确认我是否成功创建了表(Python, Psycopg2)?

15 投票
2 回答
11092 浏览
提问于 2025-04-17 12:44

我查阅了相关文档,但没有找到任何信息来告诉我,我通过cursor.execute("...")执行的最后一条命令是否成功。

我希望能收到类似“影响了1行”的回复。

2 个回答

15

这是一个老问题,但用 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,它会返回一个字符串,里面包含了最后执行的操作类型以及影响的行数。

3

我期待会出现某种异常情况
如果一切正常,那么错误代码就是00000,这时就不会出现异常。

创建表的情况下,你可以随时进行双重检查

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'

撰写回答