2013-02-27 60 views
0

我有這樣的表結構中的SQLAlchemy: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)) 

所以一個多(地址)一(用戶)之間的關係。

我現在的問題是如何在不刪除已經存儲的地址的情況下輕鬆地爲用戶添加地址。

在純SQL中,我只需在地址表中插入一行,並將外鍵用於正確的用戶。

這是我正在做它現在在SQLAlchemy的(在用戶類方法):

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

那麼我現在基本上做的是首先找出所有的地址,然後追加列表覆蓋該列表再次與額外的地址。

我想知道是否有更有效的方法來做到這一點?

回答

0

您可以定義用戶和地址之間的另一種關係,這將不使用lazy='noload'被加載(見Setting 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了類似的問題。