检测是否从 psycopg2 游标中获取?

Detect whether to fetch from psycopg2 cursor or not?

假设我执行以下命令。

insert into hello (username) values ('me')

我运行喜欢

cursor.fetchall()

我收到以下错误

psycopg2.ProgrammingError: no results to fetch

如何在不检查查询是 "insert" 或 "select" 的情况下检测是否调用 fetchall()?

谢谢。

看这个属性:

cur.description

执行查询后,如果没有返回任何行,它将被设置为 None,否则将包含数据 - 例如:

(Column(name='id', type_code=20, display_size=None, internal_size=8, precision=None, scale=None, null_ok=None),)

捕获异常并不理想,因为在某些情况下您可能会覆盖真正的异常。

使用cur.description 接受的答案不再解决问题。 cur.statusmessage 可以解决。这 returns SELECT 0INSERT 0 1。一个简单的字符串操作就可以帮助确定最后一个查询。

问题是 None 是 cur.fetchone() 的结果 所以停止循环的方法是:

cursor.execute("SELECT * from rep_usd")
output = cursor.fetchone()
while output is not None:
    print(output)
    output = DBCursor.fetchone()

cursor.description 永远不会 None!

检查cursor.pgresult_ptr是否为None。

cursor.execute(sql)
if cursor.pgresult_ptr is not None:
    cursor.fetchall()