如何序列化不可JSON序列化的对象?使用FlaskSqlAlchemy从分页中删除对象

2024-05-20 03:14:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对申请进行分页,但我有一些误解,并没有在文档中找到正确的答案

我使用烧瓶,SqlAlchemy库

q中有SELECT语句,它过滤并获取查询对象列表:

q = db_session.query(AnalogsListl) \
            .filter(AnalogsList.is_final == is_final)

d = BaseQuery.paginate(q)

变量d返回对象列表,如0x125c6db80处的[<;DBModels.analogs_list.AnalogsList对象,<;DBModels.analogs_list.AnalogsList对象,0x125c6ddf0处的<;DBModels.analogs_list.AnalogsList对象,<;0x125c6de50处的DBModels.AnalogsList对象,…]

然后我编写了两个类:分页和BaseQuery:

class Pagination(object):

    def __init__(self, query, page, per_page, total, items):
        self.query = query
        self.page = page
        self.per_page = per_page
        self.total = total
        self.items = items

    def __iter__(self):
        for page in range(1, self.pages + 1):
            yield self.query.paginate(page, self.per_page)

    def prev(self):
        return self.query.paginate(self.page - 1, self.per_page)

    def next(self):
        return self.query.paginate(self.page + 1, self.per_page)

    @property
    def pages(self):
        return int(ceil(self.total / float(self.per_page)))

class BaseQuery(Query):

    def __init__(self, *args, **kwargs):
        self.cls = args[0].class_
        super(BaseQuery, self).__init__(*args, **kwargs)

    def paginate(self, page=1, per_page=10):
        items = self.limit(per_page).offset((page - 1) * per_page).all()

        count = self.order_by(False).count()

        return Pagination(self, page, per_page, count, items)

当我运行代码时,回溯返回我
raise TypeError(类型为{o.类的对象名称} TypeError:分页类型的对象不可JSON序列化

我不确定我写的页码是否正确,也不知道如何解决我的问题

非常感谢


Tags: 对象ltselfreturndefpageitemsquery