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))

所以是多(地址)对一(用户)的关系。

我现在的问题是如何在不删除已经存储的地址的情况下轻松地向用户添加地址。

在纯 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 回答