con SQLAlchemy?
Solución:
SELECT count(*) AS count_1
FROM "table"
Logré renderizar el siguiente SELECT con SQLAlchemy en ambas capas.
from sqlalchemy import select, func, Integer, Table, Column, MetaData
metadata = MetaData()
table = Table("table", metadata,
Column('primary_key', Integer),
Column('other_column', Integer) # just to illustrate
)
print select([func.count()]).select_from(table)
Uso de la capa de expresión SQL
Uso de la capa ORM Query
Tu solo subclase count()
(probablemente lo haya hecho de todos modos) y proporcione un
from sqlalchemy.sql.expression import func
class BaseQuery(Query):
def count_star(self):
count_query = (self.statement.with_only_columns([func.count()])
.order_by(None))
return self.session.execute(count_query).scalar()
método, como este. order_by(None)
Tenga en cuenta que
restablece el orden de la consulta, que es irrelevante para el recuento. count(*)
Con este método puede tener un filter
en cualquier consulta ORM, que respetará todas lasjoin
y
condiciones ya especificadas.
session.query(MyTable.col1).count()
Consulta solo por una columna conocida:
Necesitaba hacer un recuento de una consulta muy compleja con muchas combinaciones. Estaba usando las combinaciones como filtros, por lo que solo quería saber el recuento de los objetos reales. count () fue insuficiente, pero encontré la respuesta en los documentos aquí:
http://docs.sqlalchemy.org/en/latest/orm/tutorial.html
from sqlalchemy import func
session.query(func.count(User.id)).scalar()
El código se vería así (para contar objetos de usuario):