SQLAlchemy添加多行到一行逻辑

时间:2013-02-27 17:43:06

标签: 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

所以我基本上做的是首先查找所有地址,然后附加列表再次使用额外地址覆盖列表。

我想知道是否有更有效的方法来做到这一点?

1 个答案:

答案 0 :(得分: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了解类似问题。