繁体   English   中英

在SQLAlchemy中访问联接查询结果

[英]Accessing join query results in SQLAlchemy

如果我有:

query = db.session.query(Food, Person).filter(Food.id == Person.favourite_food)
for row in db.session.execute(query)
    print row

我得到的第一个打印的输出是:

(1, u'Alice', 25, u'F', u'z', None, False, 1, u'icecream', 1, None, False)
(5, u'Bob', 38, u'M', u'z', None, False, 3, u'pizza', 1, None, False)

我该怎么办:

print row.name, row.gender # <-- how do I do this?

结果似乎不再具有列名。

编辑:还有一种方法可以只用一行来序列化查询结果,就像

return Response(json.dumps(query.results), mimetype='application/json')

当您指定

    query(Food, Person)

结果行将为sqlalchemy.util._collections.result类型,并且将具有两个字段:Food和Person

Food部分可以通过row [0]或row引用。FoodPerson部分可以通过row [1]或row.Person引用

所以例如

    print(row.Person.name, row.Person.gender) # works
    print(row[1].name, row[1].gender) # also works

如果只需要特定的字段,则可以在查询中指定它们,例如:

    query = (db.session.query(Person.name, Person.gender, Food.name.label('foodname'))
             .filter(Food.id == Person.favourite_food))

然后该对象将具有3个字段:姓名,性别,食品名

    print(row.name, row.gender, row.foodname)

您可以不同地执行查询:

for row in query.all():
    print row[1].name, row[1].gender

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM