Python中如何使用flask-sqlalchemy对一对多关系中的img按order字段进行升序或降序排序
product 是一张表
img 是一张表
定义好关联,product 一对多 img
product.img.all(),可以获取到 product 对应的 img
img 里有一个 order 作为图片顺序的标识,如何将 img 进一步进行降序或升序
Python中如何使用flask-sqlalchemy对一对多关系中的img按order字段进行升序或降序排序
3 回复
在Flask-SQLAlchemy中,对一对多关系中的img按order字段排序,可以通过在关系定义中使用order_by参数或在查询时指定排序来实现。
假设你有两个模型:Product(产品)和Image(图片),一个产品对应多张图片,图片模型中有order字段控制显示顺序。
方法1:在关系定义中指定默认排序
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
# 定义一对多关系,默认按order升序
images = db.relationship('Image',
backref='product',
lazy=True,
order_by='Image.order') # 升序排序
class Image(db.Model):
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(200))
order = db.Column(db.Integer)
product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
方法2:查询时动态排序
# 获取产品及其图片(升序)
product = Product.query.get(1)
asc_images = product.images.order_by(Image.order.asc()).all()
# 获取产品及其图片(降序)
product = Product.query.get(1)
desc_images = product.images.order_by(Image.order.desc()).all()
# 或者在查询产品时直接排序
from sqlalchemy.orm import joinedload
product = Product.query.options(
joinedload(Product.images.order_by(Image.order.desc()))
).first()
方法3:使用relationship的order_by参数指定降序
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
# 指定降序排序
images_desc = db.relationship('Image',
backref='product_desc',
lazy=True,
order_by='Image.order.desc()')
推荐做法:使用方法2在查询时动态排序,这样更灵活,可以根据需要随时切换升序或降序。
总结:在关系定义或查询时使用order_by参数控制排序方向。
感谢,我解决了,之前试过,看完更清楚了,发现 order_by 里的参数比较坑,没什么提示,我试了几次,可以了

