Python 炼金术中的连接表

Python 炼金术中的连接表,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,假设我有几个表,并希望执行联接查询: schedule_calendars = ScheduleCalendar.query\ .join(Schedule)\ .join(ClinicBranchHasDoctor)\ .filter_by(clinic_branch_id=clinic_id, doctor_has_specialty_id=doctor_speciality_id).all() 这里的问题是,我的结果

假设我有几个表,并希望执行联接查询:

schedule_calendars = ScheduleCalendar.query\
            .join(Schedule)\
            .join(ClinicBranchHasDoctor)\
            .filter_by(clinic_branch_id=clinic_id, doctor_has_specialty_id=doctor_speciality_id).all()
这里的问题是,我的结果将只包含ScheduleCalendar类的属性。如何进行查询以使结果包含所有联接表的属性

附表:

    id = Column(db.Integer, primary_key=True)
    added_date = Column(db.DateTime(timezone=True), default=get_current_time, nullable=False)
    start_date = Column(db.Date, nullable=False)
    name = Column(db.String(128), nullable=False)
    is_valid = Column(db.Boolean, default=IS_VALID, nullable=False)
    slot_size = Column(db.Integer, default=30)
日程安排日历:

  schedule_id = Column(db.Integer, db.ForeignKey("schedules.id"), nullable=False)
主治科医生:

schedule_id = Column(db.Integer, db.ForeignKey("schedules.id"), nullable=False)

我在这里跳过了一些属性。我认为最重要的是我的表具有适当的约束,否则join将失败。

您需要为类添加一个反向引用

例如,在
ScheduleCalendar
类中,添加:

schedule_id = Column(db.Integer, db.ForeignKey("schedules.id"), nullable=False)
schedule = db.relationship("Schedule", back_populates="calendar", lazy="dynamic")
在您的
课程表中添加:

calendar = db.relationship("ScheduleCalendar", back_populates="schedule")
现在,您可以从
ScheduleCalendar
访问
Schedule
对象

在您的示例中,您可以这样访问它:

schedule_calendars = ScheduleCalendar.query\
            .join(Schedule)\
            .join(ClinicBranchHasDoctor)\
            .filter_by(clinic_branch_id=clinic_id, doctor_has_specialty_id=doctor_speciality_id).all()

schedule_calendars[0].schedule