Subqueryload не работает при использовании slice

#sqlalchemy

#sqlalchemy

Вопрос:

Я написал код на python, используя sqlalchemy, извлекающий данные из MySQL. Когда страница равна 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
  

Комментарии:

1. Как я уже сказал, когда страница равна 1, все работает нормально, поэтому я не публиковал структуру данных и другие детали.

2. Никто? есть идеи?

Ответ №1:

При использовании slice это необходимо использовать order_by .

Изменение на order_by(DbBasketMain.id).slice(start, end) решило проблему.