在SQLAlchemy中访问连接查询结果

时间:2016-03-16 09:50:49

标签: python django sqlalchemy flask-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')

2 个答案:

答案 0 :(得分:4)

指定

    query(Food, Person)

结果行的类型为sqlalchemy.util._collections.result, 它将有两个领域:食物和人

食物部分可以通过row [0]或row.Food引用 Person部分可以通过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个字段:name,gender,foodname

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

答案 1 :(得分:0)

您可以采用不同的方式执行查询:

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