Python SQLAlchemy组_concat有序值

Python SQLAlchemy组_concat有序值,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我想在SQLAlchemy(使用MySQL连接器)中模拟collect\u set的行为。i、 e.A组1,2,3与2,1,3相同。我有以下代码: res = db.session \ .query(T1.col1.label('col1'), func.group_concat(T1.col2.distinct()).label('col2_group')) \ .group_by(T1.col1) \ .all() 但是,默认情况下,SQLAlchemy不会对组中的

我想在SQLAlchemy(使用MySQL连接器)中模拟
collect\u set
的行为。i、 e.A组
1,2,3
2,1,3
相同。我有以下代码:

res = db.session \
    .query(T1.col1.label('col1'), func.group_concat(T1.col2.distinct()).label('col2_group')) \
    .group_by(T1.col1) \
    .all()
但是,默认情况下,SQLAlchemy不会对组中的值进行排序,因此可能会发生重复


是否有任何方法可以模拟
收集集
行为?

不幸的是,SQLAlchemy已经正式发布了。您仍然可以使用运算符函数用其他方言表达它,尽管有点粗俗:

func.group_concat(T1.col2.distinct().op("ORDER BY")(T1.col2))
这会编译成类似

group_concat(DISTINCT t1.col2 ORDER BY t1.col2)

不幸的是,炼金术已经正式开始了。您仍然可以使用运算符函数用其他方言表达它,尽管有点粗俗:

func.group_concat(T1.col2.distinct().op("ORDER BY")(T1.col2))
这会编译成类似

group_concat(DISTINCT t1.col2 ORDER BY t1.col2)

你的意思是“默认情况下MySQL不会对组中的值排序”吗?请在问号和标签中适当地添加有问题的数据库。您的意思是“默认情况下MySQL不会对组中的值排序”吗?请在问号和标签中适当地添加有问题的DB。谢谢,不幸的是我使用MySQL。解决方案适用于Postgresql以外的其他方言,因此存在黑客行为。对于Postgresql,可以将其表示为
func.string\u agg(aggregate\u order\u by(T.col.distinct(),T.col))
等等。您也可以将GROUP_CONCAT实现为自定义和编译器。虽然string_agg的参数错误,但问题仍然存在。谢谢,不幸的是,我使用的是MySQL。解决方案适用于Postgresql以外的其他方言,因此具有黑客性。对于Postgresql,可以将其表示为
func.string\u agg(aggregate\u order\u by(T.col.distinct(),T.col))
等等。您还可以将GROUP_CONCAT实现为一个自定义和编译器。好吧,string_agg的args是错误的,但问题仍然存在。