quiero "DBSession.query (artículo) .group_by (Article.created.month) .all()"grupo por año, mes, día en un sqlalchemy
Sin embargo, esta consulta no se puede utilizar
¿Cómo hago esto usando SQLAlchemy?
quiero "DBSession.query (artículo) .group_by (Article.created.month) .all()"grupo por año, mes, día en un sqlalchemy
Sin embargo, esta consulta no se puede utilizar
¿Cómo hago esto usando SQLAlchemy?
que asumir db motor realidad compatible con funciones como MONTH()
, puede intentar
import sqlalchemy as sa
DBSession.query(Article).group_by(sa.func.year(Article.created), sa.func.month(Article.created)).all()
otra cosa puede agrupar en Python como
from itertools import groupby
def grouper(item):
return item.created.year, item.created.month
for ((year, month), items) in groupby(query_result, grouper):
for item in items:
# do stuff
THC4k respuesta trabaja, pero sólo quiero añadir que query_result
necesita estar ya ordenado para obtener itertools.groupby
trabajando de la manera que desee.
query_result = DBSession.query(Article).order_by(Article.created).all()
Aquí es la explicación en el itertools.groupby docs:
El funcionamiento de GroupBy() es similar al filtro uniq en Unix. Genera un descanso o un nuevo grupo cada vez que cambia el valor de la función clave (por lo que generalmente es necesario haber ordenado los datos usando la misma función de tecla). Ese comportamiento difiere del GROUP BY de SQL que agrega elementos comunes independientemente de su orden de entrada.
Sé que esta pregunta es antigua, pero en beneficio de cualquier persona en busca de soluciones, aquí hay otra estrategia para bases de datos que no son compatibles con funciones como MES():
db.session.query(sa.func.count(Article.id)).\
group_by(sa.func.strftime("%Y-%m-%d", Article.created)).all()
Esencialmente esto se está convirtiendo las marcas de tiempo en cadenas truncadas que luego se pueden agrupar.
Si sólo desea las entradas más recientes, se puede añadir, por ejemplo:
order_by(Article.created.desc()).limit(7)
Siguiendo esta estrategia, se puede crear fácilmente agrupaciones tales como días de la semana, simplemente omitiendo el año y mes .
wow, gracias !!! ^^ – gamp
Gracias hombre, tan útil – pylover