2017-02-01 10 views
0

Предположим, у меня есть несколько таблиц, и вы хотите, чтобы выполнить запрос с соединением:запрессовки столы в Колба-SQLAlchemy

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) 

ScheduleCalendar:

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

ClientBranchHasDoctor:

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

я пропустил некоторые атрибуты здесь. Я думаю, что наиболее важным является то, что мои таблицы имеют соответствующие ограничения, иначе соединение не удастся.

ответ

1

Вам необходимо добавить обратную ссылку на свои классы.

Например, в вашем ScheduleCalendar классе, добавьте:

schedule_id = Column(db.Integer, db.ForeignKey("schedules.id"), nullable=False) 
schedule = db.relationship("Schedule", back_populates="calendar", lazy="dynamic") 

И в вашем Schedule класса объявления:

calendar = db.relationship("ScheduleCalendar", back_populates="schedule") 

Теперь вы можете получить доступ к 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