我有两个有关系的表
class Patient(db.Model):
__tablename__ = "patient"
id = db.Column(db.UUID(as_uuid=True), primary_key=True, unique=True, server_default=sql.text("gen_random_uuid()"))
name = db.Column(db.String)
tags = db.relationship('PatientTag', backref="patient", lazy="dynamic")
class PatientTag(db.Model):
__tablename__ = "patient_tag"
id = db.Column(db.Integer, primary_key=True, autoincrement=True, unique=True)
patient_id = db.Column(db.UUID(as_uuid=True), db.ForeignKey(Patient.id))
mainTag = db.Column(db.String)
subTag = db.Column(db.String)
我想获取所有具有特定标签的患者,例如:
--Table Patient
id|name
--------
1 |pt a
2 |pt b
3 |pt c
--Table PatientTag
patient_id|mainTag|subTag
-------------------------
1 |spine |
1 |spine |degenerative
2 |spine |trauma
3 |spine |trauma
我想要所有带有标签(脊柱、创伤)的患者,这将为我提供患者 2 和 3
或所有带有标签的患者(脊柱、退行性),这只会给我患者 1
要查询具有特定标签的所有患者,可以使用ForeignKey加入,然后按标签过滤。
main_tag = 'spine'
sub_tag = 'trauma'
patients = Patient.query\
.join(PatientTag, PatientTag.patient_id == Patient.id)\
.filter(PatientTag.mainTag == main_tag, PatientTag.subTag == sub_tag)\
.all()
print(patients)