Python: Nombre de lignes affectées par le curseur.execute("SELECT …)
Comment puis-je accéder le nombre de lignes affectées par:
cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
6 réponses
Essayez d'utiliser fetchone
:
cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
result=cursor.fetchone()
result
contient un tuple avec un élément, la valeur de COUNT(*)
.
Donc, pour trouver le nombre de lignes:
number_of_rows=result[0]
Ou, si vous préférez le faire d'un seul coup:
cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
(number_of_rows,)=cursor.fetchone()
PS. C'est également une bonne pratique d'utiliser des arguments paramétrés chaque fois que c'est possible, parce qu'il peut citer automatiquement des arguments pour vous lorsque c'est nécessaire, et protéger contre l'injection sql.
la syntaxe correcte pour les arguments paramétrés dépend de votre adaptateur python/base de données (par exemple mysqldb, psycopg2 ou sqlite3). Il ressemblerait à quelque chose comme
cursor.execute("SELECT COUNT(*) from result where server_state= %s AND name LIKE %s",[2,digest+"_"+charset+"_%"])
(number_of_rows,)=cursor.fetchone()
PEP 249, qui est habituellement implémentée par les API de base de données Python:
les objets de curseur doivent répondre aux méthodes et attributs suivants:
[...]
.rowcount
Cet attribut en lecture seule spécifie le nombre de lignes que le dernier .exécuter*() produit (pour DQL des déclarations comme "select") ou affecté (pour les instructions DML comme "mettre à jour" ou "insérer").
j'Espère qu'est ce que tu voulais dire.
le nombre de lignes effectuées est renvoyé de l'exécution:
rows_affected=cursor.execute("SELECT ... ")
bien sûr, comme AndiDog déjà mentionné, vous pouvez obtenir le nombre de ligne en accédant à la propriété rowcount du curseur à tout moment pour obtenir le nombre de la dernière exécution:
cursor.execute("SELECT ... ")
rows_affected=cursor.rowcount
à Partir de la ligne de la documentation 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
"""
À mon avis, la façon la plus simple d'obtenir la quantité de lignes sélectionnées est la suivante:
l'objet curseur retourne une liste avec les résultats en utilisant les commandes fetchall (), fetchone (), fetchmany ()). Pour obtenir les lignes sélectionnées, il suffit d'imprimer la longueur de cette liste. Mais c'est juste logique pour fetchall(). ; -)
Exemple:
print len(cursor.fetchall)
pour mysql la manière la plus simple est celle-ci
mycur.execute("SELECT COUNT(*) FROM osreport")
print(mycur.fetchall())
// Cela Fonctionne pour moi. U peut utiliser de cette façon
query = "select count(id) from test"
cursor.execute(query)
var = cursor.fetchone ()
print var[0]