检测是否从 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 0
或 INSERT 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()
假设我执行以下命令。
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 0
或 INSERT 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()