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 不同的价格,因此结果应该是 100200 例如。

但是,它返回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

MongoDb导出数据.CSV格式到EXCEL

Swift 3 警告 func collectionView 实例方法几乎符合可选要求

JSON转换类

maven常见错误