Python,如何检查结果集是否为空?

2024-05-19 11:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个sql语句,它不返回命中率。例如,'select * from TAB where 1 = 2'

我想看看返回了多少行

cursor.execute(query_sql)

rs = cursor.fetchall()

这里我已经得到异常:“(0,'没有结果集')”

如何预先结束此异常,检查结果集是否为空?


Tags: fromexecutesql语句wherequeryselecttab
3条回答

cursor.rowcount通常设置为0。

但是,如果您运行的语句永远不会返回结果集(例如,不带RETURNINGSELECT ... INTOINSERT),则不需要调用.fetchall();这样的语句就不会有结果集。调用.execute()就足以运行该语句。


请注意,如果数据库适配器无法确定确切的受影响计数,则还允许数据库适配器将行计数设置为-1。请参见PEP 249 ^{} specification

The attribute is -1 in case no .execute*() has been performed on the cursor or the rowcount of the last operation is cannot be determined by the interface.

^{} library很容易这样做。在所有这些情况下,如果必须预先知道受影响的行数,请首先在同一事务中执行COUNT()select。

如果结果集为空,MySQLdb将不会引发异常。此外,cursor.execute()函数还将返回一个长值,即获取的结果集中的行数。因此,如果要检查空结果,可以将代码重写为

rows_count = cursor.execute(query_sql)
if rows_count > 0:
     rs = cursor.fetchall()
else:
     // handle empty result set

无论我尝试什么解决方案,rowcount总是返回-1。

我发现下面的一个很好的替代品来检查一个空结果。

c.execute("SELECT * FROM users WHERE id=?", (id_num,))
row = c.fetchone()
if row == None:
   print("There are no results for this query")

相关问题 更多 >

    热门问题