1

これは一種の初心者の質問です。私はORMを初めて使用し、次のことが可能かどうかを知りたいです:

「id」、「user_name」、およびテーブル「countries」を指す外部キー「country_id」の 3 つのフィールドを持つ「users」テーブルがあるとします。

テーブル関係

ここで、新しいユーザーを挿入する場合は、最初に「countries」テーブル (たとえば 11) で国の ID を探し、次に User のインスタンス (宣言ベース オブジェクト) を作成します。

new_user = User('Johnny', 11)
session.add(new_user)

私が知りたいのは、国名のみを渡して新しいユーザーを直接追加できる場合...次のようなものです:

new_user = User('Johnny', Country('Spain')) # Note the country instance
session.add(new_user)

このようなことを試してみましたが、得られた最良の結果は、ORM がスペインという別の国を挿入しようとしたことです。

前もって感謝します!!

4

1 に答える 1

4

Spain がデータベースに既に挿入されていると仮定すると、次のものが必要になります。

new_user = User(name='Johnny', country_id=session.query(Country).filter_by(name='Spain').one().id)

より明確なバージョンでは次のとおりです。

country = session.query(Country).filter_by(name='Spain').one()
new_user = User(name='Johnny', country_id=country.id)

定義済みの場合、User.country relationshipこれは単純に次のようになります。

country = session.query(Country).filter_by(name='Spain').one()
new_user = User(name='Johnny', country=country)

User.countryリレーションシップにリレーションシップが定義されている場合users backref(デフォルトで にマップされますlist)、次のこともできます。

country = session.query(Country).filter_by(name='Spain').one()
country.users.add(User(name='Johnny'))
于 2012-10-30T15:19:36.200 に答える