python - 选择语句仅返回结果中的第一行
问题描述
我有以下代码:
@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 循环上,因为它没有足够的迭代次数来获取其余数据,但是我不确定修复会看到什么结果是一个对象。
PS 如果这可以用 ORM 方法完成,我也全神贯注。我决定使用 SQL,因为我无法让我的 ORM 模型选择正确的数据。
解决方案
您的 for 循环迭代的次数恰到好处,但在其主体中,您反复将名称重新绑定dict_
到新dict
实例,因此您的函数返回查询产生的最后一个结果。相反,您需要返回一个列表,或者将您的函数转换为生成器:
def get_all_locations_for_event(value):
...
result = db.engine.execute(sql, x = value)
return result.fetchall()
对于大多数目的,不需要将RowProxy
结果的实例显式转换为dict
,因为它们自己充当有序映射。一个值得注意的例外是序列化为 JSON,因为该json
模块不知道如何处理 SQLAlchemy 行代理。
推荐阅读
- linux - Linux:查找命令列出所有内容
- excel - 如何创建每周发送邮件的时间触发器
- c++ - 在 Ubuntu 中从 cpp 程序创建一个新文件
- java - 为瘦 JDBC 客户端配置网络数据加密和完整性
- asp.net-core - Why is my OData 4 Batch not picking up the request body of the last request
- python - Tensorflow Estimator 的训练和预测线程安全吗?
- php - Keycloak无法从本地php服务器授权客户端,但使用邮递员时返回ok
- c# - 将命名空间添加到元素并在没有别名的情况下进行序列化
- javascript - 如何检查所选日期是否是本月
- php - 两个具有完全相同邮件配置的 laravel 项目:当我尝试发送电子邮件时,其中一个项目超时