【问题标题】:how to deal with sqlalchemy.util._collections.result?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()

如果有人可以帮助我,非常感谢

【问题讨论】:

标签: python sqlalchemy


【解决方案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://stackoverflow.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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-21
          • 2017-10-21
          • 2013-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多