如何访问受以下因素影响的行数:
cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
答案 0 :(得分:87)
来自PEP 249,通常由Python数据库API实现:
Cursor Objects应响应以下方法和属性:
[...]
.rowcount
此只读属性指定最后一个.execute *()生成的行数(对于像'select'这样的DQL语句)或受影响的行(对于'update'或'insert'等DML语句)。
但要小心 - 接着说:
如果对游标没有执行
.execute*()
,或者接口无法确定最后一次操作的行数,则该属性为-1。 [7]注意:强>
DB API规范的未来版本可以重新定义后一种情况,使对象返回None
而不是-1。
因此,如果您执行了语句和,和,您确定您的代码将始终针对相同DBMS的相同版本运行,这是一个合理的解决方案。
答案 1 :(得分:64)
尝试使用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()
PS。尽可能使用参数化参数也是一种好习惯,因为它可以在需要时自动为您引用参数,并防止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()
答案 2 :(得分:36)
受影响的行数从execute:
返回rows_affected=cursor.execute("SELECT ... ")
当然,正如AndiDog已经提到的,您可以通过随时访问游标的rowcount属性来获取行计数,以获取上次执行的计数:
cursor.execute("SELECT ... ")
rows_affected=cursor.rowcount
来自python MySQLdb的内联文档:
def execute(self, query, args=None):
"""Execute a query.
query -- string, query to execute on server
args -- optional sequence or mapping, parameters to use with query.
Note: If args is a sequence, then %s must be used as the
parameter placeholder in the query. If a mapping is used,
%(key)s must be used as the placeholder.
Returns long integer rows affected, if any
"""
答案 3 :(得分:16)
在我看来,获取所选行数量的最简单方法如下:
当使用fetch命令(fetchall(),fetchone(),fetchmany())时,游标对象返回一个包含结果的列表。要获取所选行,只需打印此列表的长度。但它对fetchall()有意义。 ; - )
示例:
print len(cursor.fetchall)
答案 4 :(得分:0)
要获取选定的行数,通常使用以下命令:
cursor.execute(sql)
count = (len(cursor.fetchall))
答案 5 :(得分:0)
使用count(*)
时的结果是{'count(*)': 9}
-其中9代表实例中表中的行数。
因此,为了获取公正的数字,在我的情况下,使用mysql 8可以正常工作。
cursor.fetchone()['count(*)']