Python:受 cursor.execute("SELECT ...) 影响的行数

新手上路,请多包涵

如何访问受以下因素影响的行数:

 cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")

原文由 Tie-fighter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 582
2 个回答

尝试使用 fetchone

 cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
result=cursor.fetchone()

result 将包含一个元组,其值为 COUNT(*) 。所以要找到行数:

 number_of_rows=result[0]

或者,如果您想一举完成:

 cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
(number_of_rows,)=cursor.fetchone()

附言。尽可能使用参数化参数也是一个好习惯,因为它可以在需要时自动为您引用参数,并防止 sql 注入。

参数化参数的正确语法取决于您的 python/数据库适配器(例如 mysqldb、psycopg2 或 sqlite3)。它看起来像

cursor.execute("SELECT COUNT(*) from result where server_state= %s AND name LIKE %s",[2,digest+"_"+charset+"_%"])
(number_of_rows,)=cursor.fetchone()

原文由 unutbu 发布,翻译遵循 CC BY-SA 3.0 许可协议

来自 PEP 249 ,通常由 Python 数据库 API 实现:

游标对象应响应以下方法和属性:

[…]

.rowcount

此只读属性指定最后一个 .execute*() 生成的行数(对于 DQL 语句,如“select”)或受影响的行数(对于 DML 语句,如“update”或“insert”)。

但要小心——它接着说:

如果没有对游标执行 .execute*() ,或者接口无法确定最后一个操作的行数,则该属性为-1。 [7]

笔记:

DB API 规范的未来版本可以重新定义后一种情况,使对象返回 None 而不是 -1。

因此,如果您已经执行了您的语句 并且 它有效, 并且 您确定您的代码将始终针对相同版本的相同 DBMS 运行,那么这是一个合理的解决方案。

原文由 AndiDog 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题