ich will "DBSession.query (Artikel) .group_by (Article.created.month) .Alle()"Gruppe von Jahr, Monat, Tag in einem sqlalchemy
Aber diese Abfrage kann mit nicht
Wie mache ich das mit SQLAlchemy?
ich will "DBSession.query (Artikel) .group_by (Article.created.month) .Alle()"Gruppe von Jahr, Monat, Tag in einem sqlalchemy
Aber diese Abfrage kann mit nicht
Wie mache ich das mit SQLAlchemy?
Sie DB-Engine unter der Annahme tatsächlich unterstützt Funktionen wie MONTH()
, Sie
import sqlalchemy as sa
DBSession.query(Article).group_by(sa.func.year(Article.created), sa.func.month(Article.created)).all()
Sie sonst in Python können Gruppe wie
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 Antwort arbeitet aber ich möchte nur hinzufügen, können versuchen, dass query_result
müssen bereits sein, sortiert, um itertools.groupby
zu bekommen, wie Sie wollen. Hier
query_result = DBSession.query(Article).order_by(Article.created).all()
ist die Erklärung in der itertools.groupby docs:
Der Betrieb groupby() ist ähnlich dem uniq Filter in Unix. Bei jedem Wechsel des Wertes der Schlüsselfunktion wird eine Pause oder eine neue Gruppe generiert (daher ist es in der Regel notwendig, die Daten mit derselben Schlüsselfunktion zu sortieren). Dieses Verhalten unterscheidet sich von SQL GROUP BY, das allgemeine Elemente aggregiert, unabhängig von ihrer Eingabereihenfolge.
Ich weiß, diese Frage ist alt, aber zum Nutzen von jedermann nach Lösungen suchen, hier ist eine andere Strategie für Datenbanken, die nicht unterstützen Funktionen wie MONAT():
db.session.query(sa.func.count(Article.id)).\
group_by(sa.func.strftime("%Y-%m-%d", Article.created)).all()
Im Wesentlichen ist diese Dreh die Zeitstempel in abgeschnittene Zeichenfolgen, die dann gruppiert werden können.
Wenn Sie nur die neuesten Einträge möchten, können Sie zum Beispiel hinzufügen:
order_by(Article.created.desc()).limit(7)
Nach dieser Strategie können Sie bequem Gruppierungen wie Tag-of-Woche schaffen kann einfach durch das Jahr und Monat Weglassen .
wow, danke !!! ^^ – gamp
Vielen Dank, Mann, so nützlich – pylover