0

私はSQLAlchemyにこのテーブル構造を持っています:

User(Base)
    __tablename__ = 'users'
    id = Column(Integer, primary_key = True)
    addresses = relationship("Address", backref="user")

Address(Base)
    __talbename__ = 'addresses'
    id = Column(Integer, primary_key = True)
    user_id = Column(Integer, ForeignKey(users.id))

つまり、多(アドレス)から1(ユーザー)の関係です。

私の質問は、すでに保存されているアドレスを削除せずに、ユーザーにアドレスを簡単に追加するにはどうすればよいかということです。

純粋なSQLでは、適切なユーザーへの外部キーを使用してアドレステーブルに行を挿入するだけです。

これは私がSQLAlchemy(ユーザークラスのメソッド)で今それをしている方法です:

def add_address(self, address):
    adds = self.addresses
    adds.append(address)
    self.addresses = adds

つまり、私が基本的に行っているのは、最初にすべてのアドレスを検索し、次にリストを追加してリストを追加のアドレスで再度上書きすることです。

これを行うためのより効率的な方法があるかどうか疑問に思いましたか?

4

1 に答える 1

0

User と Address の間に別の関係を定義することができます。これは次のように使用してロードされませんlazy='noload'( Noload の設定を参照)。

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key = True)
    addresses = relationship("Address", backref="user")
    addresses_noload = relationship("Address", lazy='noload')

    def add_address(self, address):
        adds = self.addresses_noload # @note: use the relationship which does not load items from DB
        adds.append(address)

同様の質問については、sqlalchemy add child in one-to many relationshipも参照してください。

于 2013-02-27T21:01:39.667 に答える