【问题标题】:Unable to access aliased fields in SQLAlchemy query results?无法访问 SQLAlchemy 查询结果中的别名字段?
【发布时间】:2017-03-08 11:04:33
【问题描述】:

对查询对象结果感到困惑。在这个例子中我没有使用外键。

lookuplocation = aliased(ValuePair)

lookupoccupation = aliased(ValuePair)

persons = db.session.query(Person.lastname, lookuplocation.displaytext, lookupoccupation.displaytext).\
         outerjoin(lookuplocation, Person.location == lookuplocation.valuepairid).\
         outerjoin(lookupoccupation, Person.occupation1 == lookupoccupation.valuepairid).all()

就数据而言,结果是正确的。但是,当我尝试访问单独的数据行时,我遇到了问题:

persons[0].lastname 按我的预期工作并返回数据。

但是,结果中有一个 person.displaytext,但是由于我为 displaytext 实体设置了别名,所以我只得到一个结果。我明白为什么我会得到结果,但我需要知道我将使用什么别名字段名称来获取两个 displaytext 列。

上述join生成的实际SQL语句如下:

SELECT person.lastname AS person_lastname, valuepair_1.displaytext AS valuepair_1_displaytext, valuepair_2.displaytext AS valuepair_2_displaytext 
FROM person LEFT OUTER JOIN valuepair AS valuepair_1 ON person.location = valuepair_1.valuepairid LEFT OUTER JOIN valuepair AS valuepair_2 ON person.occupation1 = valuepair_2.valuepairid

但这些“as”字段名称在结果中均不可用。

我是 SqlAlchemy 的新手,所以这很可能是一个“新手”问题。

谢谢。

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    抱歉 - RTFM 问题 - 应该是:

    lookuplocation.displaytext.label("myfield1"), lookupoccupation.displaytext.label("myfield2")

    返回结果后的参考字段与 person.myfield

    简单。

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 2021-02-21
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多