sqlalchemy - 使用切片时子查询加载不起作用
问题描述
我使用 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
解决方案
使用 slice 时,必须使用order_by
.
改变以order_by(DbBasketMain.id).slice(start, end)
解决问题。
推荐阅读
- google-chrome - Chrome 阻止下载
- laravel - 如何解决 Laravel 应用程序加载缓慢的问题
- c# - 如何使用 C# 将 XML 输入传递给 API 调用
- c++ - 没有匹配的调用 ann->train(TrainData, trainClasses, weights);
- python - 有没有一种好方法可以连续迭代 2 个不同长度的列表?
- asp.net-mvc - 我无法在 Visual Studio Community 2017 中运行我的 MVC.net 项目
- docker - Docker:多种组合
- python - 使用opencv python检测二进制图像中的补丁
- java - 如何使用 jena API 和 SPARQL 更新模型,例如。更新节点及其所有关联三元组的值
- web-crawler - 具有整数值但通过 Glue 爬虫以 0 作为字符串开头的外部表列