我有以下代码:
@staticmethod
def get_all_locations_for_event(value):
sql = text('SELECT * \
FROM public.location_event \
INNER JOIN public.location \
ON public.location_event.location_id = public.location.id \
WHERE event_id = :x;')
result = db.engine.execute(sql, x = value)
for r in result:
dict_ = dict(r)
return dict_
它只返回第一行。不过我希望它返回所有结果。我是 SQL-Alchemy 的新手,所以如果我遗漏了什么,请原谅我。在过去的几个小时里,我一直在网上搜索,到目前为止,我只遇到过返回单行而不是多行的代码示例。
我知道问题出在 for 循环上,因为它没有迭代足够的次数来获取其余数据,但是我不确定修复会看到结果是一个对象。
附注如果这可以通过 ORM 方法完成,我也洗耳恭听。我决定使用 SQL,因为我无法让 ORM 模型选择正确的数据。
最佳答案
您的 for 循环迭代了正确的次数,但在其主体中,您反复将名称 dict_
重新绑定(bind)到新的 dict
实例,因此您的函数返回您的查询产生的最后结果。相反,您需要返回一个列表,或者将您的函数转换为生成器:
def get_all_locations_for_event(value):
...
result = db.engine.execute(sql, x = value)
return result.fetchall()
对于大多数用途,无需显式转换 RowProxy
结果的实例到 dict
,因为它们本身充当有序映射。一个值得注意的异常(exception)是序列化为 JSON,因为 json
模块不知道如何处理 SQLAlchemy 行代理。
关于python - Select 语句仅返回结果中的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55114469/