首页 > 解决方案 > 使用切片时子查询加载不起作用

问题描述

我使用 sqlalchemy 从 MySQL 获取数据在 python 中编写了代码。当页面为 1(开始为 0,结束为 10)时,一切正常,但当页面为 2(开始为 10,结束为 20)时,db_salon 和 db_user_paymant 为空。

我尝试使用join和joinedload,但仍然无法正常工作。

def get_user_bookings(db: Session, user_id: int, page: int):
    start = (page - 1) * 10
    end = (page * 10)
    db_user_bookings = db.query(DbBasketMain).options(
        subqueryload("db_basket_services"), subqueryload("db_salon"),
        subqueryload("db_user_payment")).filter(
            DbBasketMain.user_id == user_id, DbBasketMain.salon_id != None).slice(
                start, end).all()
    for each_booking in db_user_bookings:
        each_booking.salon_name = each_booking.db_salon.name
        for each_service in each_booking.db_basket_services:
            if (each_service.barber_id):
                db_barber = get_barber_by_id(
                    db=db, barber_id=each_service.barber_id)
                each_service.barber_name = db_barber.name + " " + db_barber.family
                each_service.barber_image = get_barber_profile_image(
                    db=db, barber_id=each_service.barber_id)
    return db_user_bookings

标签: sqlalchemy

解决方案


使用 slice 时,必须使用order_by.

改变以order_by(DbBasketMain.id).slice(start, end)解决问题。


推荐阅读