86 votes

Comment compter les lignes avec SELECT COUNT(*) avec SQLAlchemy ?

J'aimerais savoir s'il est possible de générer un SELECT COUNT(*) FROM TABLE dans SQLAlchemy sans le demander explicitement avec la commande execute() . Si j'utilise :

session.query(table).count()

il génère alors quelque chose comme :

SELECT count(*) AS count_1 FROM
    (SELECT table.col1 as col1, table.col2 as col2, ... from table)

qui est nettement plus lent dans MySQL avec InnoDB. Je cherche une solution qui n'exige pas que la table ait une clé primaire connue, comme le suggère le document Obtenir le nombre de lignes dans un tableau en utilisant SQLAlchemy .

1voto

Brian C. Points 464

Je ne comprends pas bien ce que vous entendez par "sans le demander explicitement avec execute()" Il se peut donc que ce soit exactement ce que vous ne demandez pas. D'un autre côté, cela pourrait aider d'autres personnes.

Vous pouvez simplement exécuter le code SQL textuel :

your_query="""
SELECT count(*) from table
"""
the_count = session.execute(text(your_query)).scalar()

-1voto

Vous trouverez ci-dessous la méthode permettant de trouver le nombre de requêtes.

aliased_query = alias(query)
db.session.query(func.count('*')).select_from(aliased_query).scalar()

Voici le lien vers le document de référence si vous souhaitez explorer d'autres options ou lire des détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X