0

私は1つのモデル(sqlalchemyを使用)を持っています。このシナリオのすべての人は、ジョブを1つだけ持つことも、まったく持たないこともできます(ジョブもモデルです)。辞書の配列を取得する必要があります(人が人の中に仕事の巣の仕事の辞書を持っている場合、すべての辞書は1人の人を表します)

[{"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があります)。

すべての人に対して2つのクエリを回避する方法はありますか?

4

1 に答える 1

2

PersonModel代わりにからの関係を使用して、JobModel熱心にロードするように設定してみてください。

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

通常、親から子への関係を指定する必要があります。JobModelからに移動する必要がある場合は、 backrefPersonModelを指定できます。これは、熱心にロードするように設定することもできます。

于 2013-03-27T12:59:27.490 に答える