2024-05-19 11:30:37 发布
网友
我有一个sql语句,它不返回命中率。例如,'select * from TAB where 1 = 2'。
'select * from TAB where 1 = 2'
我想看看返回了多少行
cursor.execute(query_sql) rs = cursor.fetchall()
这里我已经得到异常:“(0,'没有结果集')”
如何预先结束此异常,检查结果集是否为空?
cursor.rowcount通常设置为0。
cursor.rowcount
但是,如果您运行的语句永远不会返回结果集(例如,不带RETURNING或SELECT ... INTO的INSERT),则不需要调用.fetchall();这样的语句就不会有结果集。调用.execute()就足以运行该语句。
RETURNING
SELECT ... INTO
INSERT
.fetchall()
.execute()
请注意,如果数据库适配器无法确定确切的受影响计数,则还允许数据库适配器将行计数设置为-1。请参见PEP 249 ^{} specification:
-1
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.
.execute*()
^{} library很容易这样做。在所有这些情况下,如果必须预先知道受影响的行数,请首先在同一事务中执行COUNT()select。
COUNT()
如果结果集为空,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")
cursor.rowcount
通常设置为0。但是,如果您运行的语句永远不会返回结果集(例如,不带
RETURNING
或SELECT ... INTO
的INSERT
),则不需要调用.fetchall()
;这样的语句就不会有结果集。调用.execute()
就足以运行该语句。请注意,如果数据库适配器无法确定确切的受影响计数,则还允许数据库适配器将行计数设置为} specification :
-1
。请参见PEP 249 ^{^{} library 很容易这样做。在所有这些情况下,如果必须预先知道受影响的行数,请首先在同一事务中执行
COUNT()
select。如果结果集为空,MySQLdb将不会引发异常。此外,cursor.execute()函数还将返回一个长值,即获取的结果集中的行数。因此,如果要检查空结果,可以将代码重写为
无论我尝试什么解决方案,rowcount总是返回-1。
我发现下面的一个很好的替代品来检查一个空结果。
相关问题 更多 >
编程相关推荐