python - 在 SQLAlchemy 中访问连接查询结果

标签 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')

最佳答案

当你指定

    query(Food, Person)

结果行将是 sqlalchemy.util._collections.result 类型, 它将有两个字段:Food 和 Person

可以通过 row[0] 或 row.Food 引用 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)

关于python - 在 SQLAlchemy 中访问连接查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032078/

相关文章:

python - 如何批量更新 Django 查询集的多对多字段

mysql - 使用 sqlalchemy 生成 : SELECT * . .. INTO OUTFILE "file";

python - 使用具有奇怪输出的 Softmax 的神经网络

python - 如何禁止 Pepper 在房间内移动

python - 如何在python中将元素添加到3维数组

python - Django 中的详细弃用警告

python - 这里的ret是什么意思以及该值是如何设置的

django - 这是多么不安全?

python - 元组列表中带有元组的 SQLalchemy 复杂 in_ 子句

Python SQLite 错误绑定(bind),带字符串的类型不受支持