Solución:
De PEP 249, que generalmente es implementado por las API de la base de datos de Python:
Los objetos de cursor deben responder a los siguientes métodos y atributos:
[…]
.rowcount
Este atributo de solo lectura especifica el número de filas que produjo el último .execute * () (para declaraciones DQL como ‘seleccionar’) o afectadas (para declaraciones DML como ‘actualizar’ o ‘insertar’).
Pero tenga cuidado, continúa diciendo:
El atributo es -1 en caso de que no
.execute*()
se ha realizado en el cursor o el recuento de filas de la última operación no puede ser determinado por la interfaz. [7]Nota:
Las versiones futuras de la especificación de la API de base de datos podrían redefinir el último caso para que el objeto vuelva
None
en lugar de -1.
Entonces, si ha ejecutado su declaración, y funciona, y está seguro de que su código siempre se ejecutará con la misma versión del mismo DBMS, esta es una solución razonable.
Intenta usar fetchone
:
cursor.execute("SELECT COUNT(*) from result where server_state="2" AND name LIKE '"+digest+"_"+charset+"_%'")
result=cursor.fetchone()
result
contendrá una tupla con un elemento, el valor de COUNT(*)
. Entonces, para encontrar el número de filas:
number_of_rows=result[0]
O, si prefiere hacerlo de una sola vez:
cursor.execute("SELECT COUNT(*) from result where server_state="2" AND name LIKE '"+digest+"_"+charset+"_%'")
(number_of_rows,)=cursor.fetchone()
PD. También es una buena práctica utilizar argumentos parametrizados siempre que sea posible, ya que puede citar argumentos automáticamente cuando sea necesario y protege contra la inyección de SQL.
La sintaxis correcta para argumentos parametrizados depende de su adaptador de base de datos / python (por ejemplo, mysqldb, psycopg2 o sqlite3). Se vería algo así como
cursor.execute("SELECT COUNT(*) from result where server_state= %s AND name LIKE %s",[2,digest+"_"+charset+"_%"])
(number_of_rows,)=cursor.fetchone()
El número de filas afectadas se devuelve desde la ejecución:
rows_affected=cursor.execute("SELECT ... ")
por supuesto, como AndiDog ya mencionó, puede obtener el recuento de filas accediendo a la propiedad de recuento de filas del cursor en cualquier momento para obtener el recuento de la última ejecución:
cursor.execute("SELECT ... ")
rows_affected=cursor.rowcount
De la documentación en línea de 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
"""