如何替换sqlalchemy查询中的列

时间:2016-04-29 17:46:15

标签: python sqlalchemy

我有查询:

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(或类似的东西,对不起,但我不记得正确的名字)并且我得不到正确的结果。

2 个答案:

答案 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"