按标签过滤条目

问题描述 投票:0回答:1

我有两个有关系的表

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

python flask sqlalchemy
1个回答
0
投票

要查询具有特定标签的所有患者,可以使用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)
© www.soinside.com 2019 - 2024. All rights reserved.