我有一个模型(使用 sqlalchemy )Person。此方案中的每个人只能有一个作业或没有作业(作业也是模型)。我需要检索字典数组(每个字典代表一个人,如果人在人的内部有工作嵌套作业字典)
[{"name":"Timothy", "age":26},
{"name":"Jack", "age":34, "job":{"type":"programmer, "money":5}},
...
]
此刻我会像这样迭代人:
for person in session.query(PersonModel).all():
result_person = create_dictionary_for_person()
job = session.query(JobModel).filter(JobModel.person_id == person.id).first()
if job:
result_person['job'] = create_dictionary_for_job()
some_list.append(result_person)
(create_dicti ...是转换的简单函数,JobModel在PersonModel上有外键person_id,都有主键id。)
有没有办法避免每个人有两个查询?
答案 0 :(得分:2)
尝试使用PersonModel
与JobModel
之间的关系,并将其设置为急切加载:
class PersonModel(Base):
...
job = relationship('JobModel', lazy='joined')
您通常希望指定父母与子女之间的关系。如果您还需要从JobModel
转到PersonModel
,则可以指定backref,也可以将其设置为急切加载。