66

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

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

6 回答 6

99

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

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

[…]

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

但要小心——它接着说:

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

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

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

于 2010-03-24T21:59:35.343 回答
98

尝试使用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()
于 2010-03-25T01:07:06.360 回答
41

从执行返回影响的行数:

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

    """
于 2010-05-14T13:08:27.387 回答
19

在我看来,获取所选行数的最简单方法如下:

当使用 fetch 命令(fetchall()、fetchone()、fetchmany())时,游标对象会返回一个包含结果的列表。要获取选定的行,只需打印此列表的长度。但这对 fetchall() 来说才有意义。;-)

例子:

print len(cursor.fetchall) 
于 2013-11-08T08:14:09.657 回答
2

要获取所选行数,我通常使用以下命令:

cursor.execute(sql)
count = (len(cursor.fetchall))
于 2020-09-04T06:54:17.567 回答
0

使用count(*)结果是{'count(*)': 9}

-- 对于实例,其中 9 表示表中的行数。

因此,为了获取唯一的数字,这在我的情况下有效,使用 mysql 8。

cursor.fetchone()['count(*)']
于 2020-11-01T22:38:59.267 回答