我有一个没有命中返回的sql语句。例如,'select * from TAB where 1 = 2'
。Python,如何检查结果集是否为空?
我要检查多少行被返回,
cursor.execute(query_sql)
rs = cursor.fetchall()
在这里,我找到一些例外:“(0,‘没有结果集’)”
我怎样才能PREVEND此异常,检查结果集是否为空?
我有一个没有命中返回的sql语句。例如,'select * from TAB where 1 = 2'
。Python,如何检查结果集是否为空?
我要检查多少行被返回,
cursor.execute(query_sql)
rs = cursor.fetchall()
在这里,我找到一些例外:“(0,‘没有结果集’)”
我怎样才能PREVEND此异常,检查结果集是否为空?
cursor.rowcount
将然而,如果你正在运行的将从未返回结果集(如INSERT
或SELECT ... INTO
),那么你并不需要调用.fetchall()
声明被设置为0
;对于这样的语句将不会有结果集有史以来。调用.execute()
就足以运行该语句。
在我的脚本中,我执行一个sql语句列表,测量它们的运行时间和点击次数。我不能事先知道一个语句是选择还是插入,在每个查询执行后有没有一种方法可以让我知道是否有结果集?非常感谢。 –
@TaoVenzke:使用'try:results = cursor.fetchall()'然后用'except'处理程序捕获异常?在这种情况下,并非所有的数据库都会抛出异常,您在这里使用了哪个数据库 –
我正在使用SAP HANA数据库。我用TRY做到了,发现了一个异常。但我想在这种情况下避免例外。光标。rowcount非常令人困惑:它为select语句返回-1;它返回NOT 0为插入语句,它返回的数字似乎是插入的记录数,但我真的可以相信它吗? –
如果结果集为空,MySQLdb不会引发异常。此外,cursor.execute()函数将返回一个long值,该值是获取结果集中的行数。所以,如果你想检查空的结果,你的代码可以被重新写为
rows_count = cursor.execute(query_sql)
if rows_count > 0:
rs = cursor.fetchall()
else:
// handle empty result set
与Oracle工作得很好! – Gistack
注:这是在Python MySQLdb的模块。
对于SELECT
语句,空记录集不应该有例外。对于cursor.fetchall()
和None
只是一个空列表([]
),对于cursor.fetchone()
。
对于任何其他陈述,例如INSERT
或UPDATE
,即不返回记录集,您既不能在光标上调用fetchall()
也不能调用fetchone()
。否则,会引发异常。
有上述两种类型的游标来区分的一种方法:
def yield_data(cursor):
while True:
if cursor.description is None:
# No recordset for INSERT, UPDATE, CREATE, etc
pass
else:
# Recordset for SELECT, yield data
yield cursor.fetchall()
# Or yield column names with
# yield [col[0] for col in cursor.description]
# Go to the next recordset
if not cursor.nextset():
# End of recordsets
return
,如果你连接到一个Postgres数据库,以下工作:
result = cursor.execute(query)
if result.returns_rows:
# we got rows!
return [{k:v for k,v in zip(result.keys(), r)} for r in result.rows]
else:
return None
你可以这样做:
count = 0
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=serverName;"
"Trusted_Connection=yes;")
cursor = cnxn.cursor()
cursor.execute(SQL query)
for row in cursor:
count = 1
if true condition:
print("True")
else:
print("False")
if count == 0:
print("No Result")
谢谢:)
发布答案时,尝试解释为什么此答案与代码本身一起解决了问题。 – David
这是什么数据库?我不希望这里出现异常,而是'.fetchall()'返回一个空列表。 –