python – 查询父模型时是否可以过滤关系的内容?
作者:互联网
我有两个模特代表电影和他们的表演时间.我想查询所有电影,但他们的show_times关系应该只包含将来的节目时间.
class PKMovie(db.Model):
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(255))
show_times = db.relationship('ShowTime')
class ShowTime(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.Date)
pk_movie_id = db.Column(db.Integer, db.ForeignKey('pk_movie.id'))
在查询父级时是否可能影响关系的内容?
解决方法:
默认情况下,关系是一个简单的相等表达式:Parent.id == ForeignKey.id.您无法在查询时更改关系的内容*,但您可以创建另一个仅选择所需项目的关系.
class PKMovie(db.Model):
# ...
future_show_times = db.relationship(
lambda: ShowTime,
primaryjoin=lambda: db.and_(
PKMovie.id == ShowTime.pk_movie_id,
ShowTime.date >= db.func.current_timestamp()
),
viewonly=True
)
访问实例的future_show_times将仅返回将来的显示时间.您可以在查询期间急切地加载此关系,以便在访问时不会产生额外的数据库查询.
PKMovie.query.options(db.joinedload(PKMovie.future_show_times)).all()
见documentation for relationships.
*从技术上讲,您可以在查询时更改关系,如this answer所示.但是,我认为明确定义这些其他关系会更清楚.
标签:python,sqlalchemy,flask-sqlalchemy 来源: https://codeday.me/bug/20191008/1874738.html