SQLAlchemy关系选择标准

SQLAlchemy关系选择标准,sqlalchemy,Sqlalchemy,我有两个模型课: 类程序(db.Model): __tablename_=“程序” id=db.Column(db.Integer,主键=True) title=db.Column(db.String(100),null=False) description=db.Column(db.String(100),nullable=False) duration=db.Column(db.Integer,nullable=False) date\u created=db.Column(db.date,

我有两个模型课:

类程序(db.Model):
__tablename_=“程序”
id=db.Column(db.Integer,主键=True)
title=db.Column(db.String(100),null=False)
description=db.Column(db.String(100),nullable=False)
duration=db.Column(db.Integer,nullable=False)
date\u created=db.Column(db.date,默认值=datetime.now())
创建人=db.Column(db.String(100))
program\u sessions=db.relationship('program\u Session',backref='programs'))
课程计划会话(数据库模型):
__tablename=“程序\会话”
id=db.Column(db.Integer,主键=True)
session_title=db.Column(db.String(100),nullable=False)
会话描述=db.Column(db.String(100))
session\u year=db.Column(db.Integer)
program_id=db.Column(db.Integer,db.ForeignKey(“programs.id”),nullable=False)
students=db.relationship('Student\u Registration',backref='program\u session')
date\u created=db.Column(db.date,默认值=datetime.now())
创建人=db.Column(db.String(100))
我通过以下方式创建程序对象:

program=Programs.query.first()
现在,我可以从所选程序访问所有程序会话:

打印(专业程序会话)
是否可以子查询/查询以仅检索2021年的程序中的程序会话?

选项1:在“python”上进行筛选(内存中) 一旦获得所有程序会话(
all\u Sessions=pro.Program\u Sessions
),您就可以通过
Sessions\u 2021=[如果item.session\u year==2021,则所有程序会话中的项目对应项目]
对它们进行过滤

不用说,这一点效率都不高,因为大量数据将从数据库加载并立即丢弃

选择2:使用 定义与
lazy=“dynamic”
的关系,该关系将返回一个
查询
,因此您将能够对查询应用其他条件:

class Programs(db.Model):
    # ...
    program_sessions = db.relationship('Program_Session', backref='programs', lazy="dynamic")

program = Programs.query.first()
sessions_2021 = program.program_sessions.filter(Program_Session.year == 2021).all()
选项3:使用[最佳]
这回答了你的问题吗?
sessions_2021 = select(Program_Session).where(with_parent(program, Program_Session.programs)).where(Program_Session.year == 2021)