SQLAlchemy:访问group_concat的数据

时间:2015-07-01 22:48:48

标签: python sqlalchemy group-concat

我正在学习python,也许我的下面的问题听起来有点愚蠢,但我自己找不到答案:

在我的代码中,我有以下查询:

jobs = session.query(Ecordov, Ecordovadr, func.group_concat(Ecordovadr.ooaname1)).outerjoin(Ecordovadr).filter(Ecordov.oovpudate.like('2015-07-02')).group_by(Ecordov.oovorder).order_by(desc(Ecordov.oovputimev))

评估为:

SELECT ecordov.oovkey AS ecordov_oovkey, ecordov.oovorder AS ecordov_oovorder, ecordov.oovpudate AS ecordov_oovpudate, ecordov.oovputimev AS ecordov_oovputimev, ecordovadr.ooakey AS ecordovadr_ooakey, ecordovadr.ooaname1 AS ecordovadr_ooaname1, ecordovadr.ooaorder AS ecordovadr_ooaorder, group_concat(ecordovadr.ooaname1) AS group_concat_1 
FROM ecordov 
LEFT OUTER JOIN ecordovadr ON ecordov.oovorder = ecordovadr.ooaorder 
GROUP BY ecordov.oovorder 
ORDER BY ecordov.oovputimev DESC

直接针对mysql运行它可以按预期工作,并为我提供预期的结果。

另外,做一些像

这样的事情
for x in jobs:
    x.Ecordov.oovorder

在我的python代码中给出了正确的结果。

但是,我不知道如何访问group_concat功能的数据。 我尝试了

的变体
for x in jobs:
    x.group.concat1

但我得到的只是:

  

AttributeError:'result'对象没有属性'group'

有人能指出我正确的方向吗?看来,我自己也搞清楚了。

提前致谢和最诚挚的问候!

1 个答案:

答案 0 :(得分:4)

func.group_concat(Ecordovadr.ooaname1)在结果集中创建一个匿名字段,因此无法按名称访问。

要按名称访问它,必须像下面这样指定标签:

func.group_concat(Ecordovadr.ooaname1).label('ooanames')

这将评估以下sql:

group_concat(ecordovadr.ooaname1) AS 'ooanames'

然后,它可以被称为:

for x in jobs:
    x.ooanames

如果未指定标签,则该字段仍可在位置单独访问,即

for x in jobs:
    x[7] # unless I miscounted from your example