sqlalchemy.util._collections.result怎么处理?
Posted
技术标签:
【中文标题】sqlalchemy.util._collections.result怎么处理?【英文标题】:how to deal with sqlalchemy.util._collections.result? 【发布时间】:2018-01-12 18:40:48 【问题描述】:我只想执行sql:
select distinct price from items
所以我编写如下 sqlalchemy 代码:
result_list = session.query(func.distinct(items.price)).all()
在我的数据库中,只有 2
不同的价格,因此结果应该是 100
和 200
例如。
但是,它返回sqlalchemy.util._collections.result
的列表。
但是我想要的是一个int的列表,比如[100, 200]
我当然可以这样做:
int_list = [ x.price for x in result_list ]
但是这个“解决方法”太丑了。
那么有没有像to_base_type
这样的函数,这样我就可以写出这样的代码:
int_list = session.query(func.distinct(items.price)).to_base_type()
如果有人可以帮助我,非常感谢
【问题讨论】:
你考虑使用marshmallow library吗? 这能回答你的问题吗? Query for list of attribute instead of tuples in SQLAlchemy 这能回答你的问题吗? SQL Alchemy ORM returning a single column, how to avoid common post processing 【参考方案1】:您可以使用结果类的_asdict()
方法。
一个例子是
def get_dict_list_from_result(result):
list_dict = []
for i in result:
i_dict = i._asdict() # sqlalchemy.util._collections.result , has a method called _asdict()
list_dict.append(i_dict)
return list_dict
【讨论】:
【参考方案2】:看这个答案:https://***.com/a/13118371/8953378
你可以使用:
result_list = [p for (p,) in session.query(func.distinct(items.price))]
【讨论】:
【参考方案3】:返回的结果是KeyedTuple
,因此,当你循环它时 - 你可以这样写:
result_list = session.query(items.X, items.Y, func.distinct(items.price)).all()
for (x, y, price) in result_list:
... now just use x,y and price as regular variables ....
请注意,_asdict()
不是有序字典 ...(以防它对某人很重要)
【讨论】:
【参考方案4】:return [element.to_dict(show=['price']) for element in result_list]
P.S.:还应该返回 primary_key
【讨论】:
以上是关于sqlalchemy.util._collections.result怎么处理?的主要内容,如果未能解决你的问题,请参考以下文章
json 尝试使用针对端点的此命令更新具有HL7数据的资源图层:http://resourcemap.instedd.org/api/collecti