2013-02-27 120 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了类似的问题。