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+"_%'")
40
demandé sur Tie-fighter 2010-03-25 00:52:54

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()
52
répondu unutbu 2011-12-05 12:21:44

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.

85
répondu AndiDog 2010-03-24 21:59:35

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

    """
34
répondu Boaz 2010-05-14 13:08:27

À 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) 
18
répondu harvey_c 2014-04-10 00:58:45

pour mysql la manière la plus simple est celle-ci

mycur.execute("SELECT COUNT(*) FROM osreport")
print(mycur.fetchall())
1
répondu atulya kumar 2014-08-31 07:14:52

// 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]
0
répondu Towqir Ahmed Shaem 2017-09-23 09:46:56