[英]Why sqlalchemy result dict ignores text() columns?
我正在尝试新的 sqlalchemy 1.4 select() 语法,但是在执行这个简单的查询时,结果字典错过了“图表”列,但结果列表包含它。
import sqlalchemy as sa
from source.Models import Quadrant, Graph
engine = sa.create_engine("postgresql://blahblahblah")
dbsession = sa.orm.Session(engine)
stmt = sa.select(
Quadrant.id,
sa.text("jsonb_agg(graph.data order by graph.id) as graphs")
).outerjoin(
Graph, Quadrant.id == Graph.quadrant_id
).group_by(
Quadrant.id
)
with dbsession.begin():
res = dbsession.execute(stmt)
for r in res:
print(r.keys()) # -> ['id'] **no graphs here!**
print(list(r)) # -> [0, {aggregated data}]
print(r[1]) # -> {aggregated data}
有没有办法让 dict 的结果包含文本列?
我对在 python 中聚合结果不感兴趣:我想在 postgresql 中聚合。
如果要使用文本片段,请使用literal_column
而不是text
:
sa.literal_column("jsonb_agg(graph.data order by graph.id)").label("graph")
您还可以使用 SQLA 构造生成表达式:
from sqlalchemy.dialects.postgresql import aggregate_order_by
sa.func.jsonb_agg(aggregate_order_by(Graph.data, Graph.id)).label('graph')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.