yer*_*syl 2 python sqlalchemy flask
假设我有几个表并想要执行联接查询:
schedule_calendars = ScheduleCalendar.query\
.join(Schedule)\
.join(ClinicBranchHasDoctor)\
.filter_by(clinic_branch_id=clinic_id, doctor_has_specialty_id=doctor_speciality_id).all()
Run Code Online (Sandbox Code Playgroud)
问题是我的结果将仅包含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)
Run Code Online (Sandbox Code Playgroud)
ScheduleCalendar:
schedule_id = Column(db.Integer, db.ForeignKey("schedules.id"), nullable=False)
Run Code Online (Sandbox Code Playgroud)
ClientBranchHasDoctor:
schedule_id = Column(db.Integer, db.ForeignKey("schedules.id"), nullable=False)
Run Code Online (Sandbox Code Playgroud)
我在这里跳过了一些属性。我认为最重要的是我的表具有适当的约束,否则联接将失败。
您需要添加对类的反向引用。
例如,在您的ScheduleCalendar课程中,添加:
schedule_id = Column(db.Integer, db.ForeignKey("schedules.id"), nullable=False)
schedule = db.relationship("Schedule", back_populates="calendar", lazy="dynamic")
Run Code Online (Sandbox Code Playgroud)
并在您的Schedule课程中添加:
calendar = db.relationship("ScheduleCalendar", back_populates="schedule")
Run Code Online (Sandbox Code Playgroud)
现在,您可以Schedule从访问对象ScheduleCalendar。
在您的示例中,您将像这样访问它:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5735 次 |
| 最近记录: |