gpt4 book ai didi

python - 列表属性没有排序依据

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:55 24 4
gpt4 key购买 nike

我尝试在 sqlalchemy 查询中进行排序,参数来自“query_sort”,其中包含排序参数列表(字段和方向)。

这是代码

      def select_all(self, query_paging, query_sort):
""" method to select all the transport type"""
try:
select_all_query =\
self._session.query(TransportType)
for s in query_sort:
select_all_query =\
>> select_all_query.order_by(s.dir(getattr(TransportType, s.field)))\
.limit(query_paging.page_size)\
.offset(query_paging.skip)\
.all()
return select_all_query
except NoResultFound:
return None

然后在 py.test 中,我尝试使用以下代码测试这个程序:

s1 = sort
s1.field = "type"
s1.dir = asc

s2 = sort
s2.field = "transport_type_id"
s2.dir = asc

query_sort = [s1,s2]

query_paging.skip = 1
query_paging.page_size = 10
transport_types = repo.select_all(query_paging, query_sort)
assert len(transport_types) == 1

当我运行测试时,我得到了这个错误:

E               AttributeError: 'list' object has no attribute 'order_by'

当我只使用一个数据 (s1) 时它工作正常,但是当我尝试使用多个数据对其进行测试时它会产生此错误。

最佳答案

您在查询中调用了 .all(),它会在列表中返回查询的所有结果:

select_all_query =\
select_all_query.order_by(s.dir(getattr(TransportType, s.field)))\
.limit(query_paging.page_size)\
.offset(query_paging.skip)\
.all()

所以循环 select_all_querynext 迭代现在是一个列表。

如果您需要应用不同的顺序,请在循环中只是:

select_all_query = self._session.query(TransportType)
for s in query_sort:
select_all_query = select_all_query.order_by(
s.dir(getattr(TransportType, s.field)))

select_all_query = (
select_all_query.limit(query_paging.page_size)
.offset(query_paging.skip)
.all())
return select_all_query

关于python - 列表属性没有排序依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30637016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com