Dig*_*tal 2 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
Run Code Online (Sandbox Code Playgroud)
我得到的第一个打印的输出是:
(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)
Run Code Online (Sandbox Code Playgroud)
我该怎么做:
print row.name, row.gender # <-- how do I do this?
Run Code Online (Sandbox Code Playgroud)
结果似乎不再具有列名。
编辑:还有一种方法可以只用一行来序列化查询结果,就像
return Response(json.dumps(query.results), mimetype='application/json')
Run Code Online (Sandbox Code Playgroud)
小智 6
当您指定
query(Food, Person)
Run Code Online (Sandbox Code Playgroud)
结果行将为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
Run Code Online (Sandbox Code Playgroud)
如果只需要特定的字段,则可以在查询中指定它们,例如:
query = (db.session.query(Person.name, Person.gender, Food.name.label('foodname'))
.filter(Food.id == Person.favourite_food))
Run Code Online (Sandbox Code Playgroud)
然后该对象将具有3个字段:姓名,性别,食品名
print(row.name, row.gender, row.foodname)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3077 次 |
| 最近记录: |