簡體   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