我正在学习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'
有人能指出我正确的方向吗?看来,我自己也搞清楚了。
提前致谢和最诚挚的问候!
答案 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