Les résultats SQL sont des (multi) ensembles et, en tant que tels, n'ont pas d'ordre, à moins que vous n'en définissiez un explicitement. Cela s'applique aux lignes de groupe produites par GROUP BY
aussi bien; il n'y a pas d'ordre dans les groupes, et donc les agrégats reçoivent des valeurs dans n'importe quel ordre dans lequel la requête actuelle en fonction du plan, de la disposition physique, de la planification, etc. se produit. La solution consiste à définir explicitement le commande
:
func.group_concat(t.name.op("ORDER BY")(t.name))
Cela utilise une fonction d'opérateur générique pour produire la syntaxe SQL requise. SQLAlchemy fournit le aggregate_order_by
helper pour la même syntaxe, mais il est fourni uniquement pour le dialecte Postgresql.