SQL-Ergebnisse sind (mehrere) Sätze und haben als solche keine Reihenfolge, es sei denn, Sie definieren explizit eine. Dies gilt für Gruppenzeilen, die von GROUP BY
erzeugt werden auch; Es gibt keine Reihenfolge innerhalb der Gruppen, und so erhalten Aggregate Werte in beliebiger Reihenfolge, die die aktuelle Abfrage je nach Plan, physischem Layout, Terminierung usw. gerade ergibt. Die Lösung besteht darin, explizit zu definieren bestellen
:
func.group_concat(t.name.op("ORDER BY")(t.name))
Dies verwendet eine generische Operatorfunktion um die erforderliche SQL-Syntax zu erzeugen. SQLAlchemy stellt den aggregate_order_by
helper für die gleiche Syntax, wird aber nur für den Postgresql-Dialekt bereitgestellt.