0

我有一个模型(使用sqlalchemy)人。在这种情况下,每个人只能有一个工作或没有工作(工作也是模型)。我需要检索字典数组(每个字典代表一个人,如果人在人的内部有工作嵌套工作字典)

[{"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)。

有什么办法可以避免每个人两次查询?

4

1 回答 1

2

尝试使用 from PersonModelto关系JobModel,并将其设置为热切加载:

class PersonModel(Base):
    ...
    job = relationship('JobModel', lazy='joined')

您通常希望指定从父母到孩子的关系。如果还需要 from JobModelto PersonModel,可以指定一个backref,也可以设置为急切加载。

于 2013-03-27T12:59:27.490 回答