假设我执行以下命令。
cursor.fetchall()
我喜欢
psycopg2.ProgrammingError: no results to fetch
我收到以下错误
{{1}}
如果不检查查询是“插入”还是“选择”,如何检测是否调用fetchall()?
感谢。
答案 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 0
或INSERT 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永远不会为空!