SQLAlchemy group_concat有序值

时间:2017-11-01 10:05:18

标签: python mysql sqlalchemy

我想在SQLAlchemy中模拟collect_set的行为(使用MySQL连接器)。即,组A 1,2,32,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不会对组中的值进行排序,因此可能会出现重复项。

有没有办法模拟collect_set行为?

1 个答案:

答案 0 :(得分:1)

不幸的是,SQLAlchemy有官方aggregate ORDER BY support for Postgresql only。您仍然可以使用generic op()运算符函数在其他方言中表达它,虽然有点hackish:

func.group_concat(T1.col2.distinct().op("ORDER BY")(T1.col2))

将编译为类似

的内容
group_concat(DISTINCT t1.col2 ORDER BY t1.col2)