【发布时间】:2021-08-14 01:22:55
【问题描述】:
我定义了4个数据库模型如下:
class User(ModelMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
full_name = db.Column(db.String, nullable=False)
gender = db.Column(db.Integer, db.ForeignKey('gender.key'))
mobile = db.Column(db.String, unique=True, nullable=False)
# some other fields in between
...
doctor = db.relationship(Doctor, backref='user', cascade="all,delete", uselist=False)
class Doctor(ModelMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
category_id = db.Column(db.Integer, db.ForeignKey('category.id'), nullable=False)
schedules = db.relationship(DoctorSchedule, backref='doctor', lazy=True, cascade='delete-orphan, delete, all')
reserved_intervals = db.relationship(AppointmentInterval, backref='doctor', lazy=True)
# some other fields in between
...
class DoctorSchedule(ModelMixin, db.Model):
__tablename__ = 'doctor_schedule'
__table_args__ = (
db.UniqueConstraint('day_of_week', 'type', 'doctor_id', name='unique_schedule'),
)
id = db.Column(db.Integer, primary_key=True)
doctor_id = db.Column(db.Integer, db.ForeignKey('doctor.id', ondelete='CASCADE'), nullable=False)
day_of_week = db.Column(db.Integer, nullable=False)
type = db.Column(db.Integer, nullable=False)
intervals = db.relationship(ScheduleInterval, backref='doctor_schedule', lazy=True, cascade='delete-orphan, delete, all')
class ScheduleInterval(ModelMixin, db.Model):
__tablename__ = 'schedule_interval'
id = db.Column(db.Integer, primary_key=True)
schedule_id = db.Column(db.Integer, db.ForeignKey('doctor_schedule.id', ondelete="CASCADE"), nullable=False)
start = db.Column(db.Time, nullable=False)
end = db.Column(db.Time, nullable=False)
现在我想知道如何使用医生模型(父)编写查询来过滤调度模型(子)。以下查询正确吗?
doctor_schedule = Doctor.query.filter(
Doctor.schedules.any(doctor_id=doctor_id),
Doctor.schedules.any(type=appointment_type)).all()
【问题讨论】:
-
上述查询是否有任何错误或任何限制?
标签: python-3.x postgresql flask sqlalchemy flask-sqlalchemy