我有查询:
q = Session.query(func.array_agg(Order.col))
编译的查询将是:
SELECT array_agg(order.col) FROM orders
我想动态替换现有列。替换查询后必须:
SELECT group_concat(orders.col) FROM orders
我必须使用Session和model。我不必使用SQLAlchemy核心。我不必使用子查询。当然,可能还有其他一些列,但我只需要替换一个。我试图替换column_descriptions
属性中的对象,我试图使用q.selectable.replace
(或类似的东西,对不起,但我不记得正确的名字)并且我得不到正确的结果。
答案 0 :(得分:3)
正确的方法:
q = Session.query(func.array_agg(Order.col))
q.with_entities(func.group_concat(Order.col))
SELECT group_concat(orders.col) FROM orders
答案 1 :(得分:1)
您可以替换query._entities
列表
from sqlalchemy import func
from sqlalchemy.orm.query import _ColumnEntity
q = db.session.query(func.array_agg(Order.col))
print q
>> SELECT array_agg("order".col) AS array_agg_1 FROM "order"
new_entity = _ColumnEntity(q, func.group_concat(Order.col))
q._entities[0] = new_entity
print q
>> SELECT group_concat("order".col) AS group_concat_1 FROM "order"