检测是否从psycopg2光标获取?

时间:2016-07-29 11:21:59

标签: python psycopg2

假设我执行以下命令。

cursor.fetchall()

我喜欢

psycopg2.ProgrammingError: no results to fetch

我收到以下错误

{{1}}

如果不检查查询是“插入”还是“选择”,如何检测是否调用fetchall()?

感谢。

3 个答案:

答案 0 :(得分:16)

看看这个属性:

cur.description

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

问题在于,结果是None是cur.fetchone()的结果 因此,停止循环的方法是:

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

cursor.description永远不会为空!