SQLAlchemy添加多对一行逻辑

SQLAlchemy添加多对一行逻辑,sqlalchemy,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 = Tru

我在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(用户类中的方法)中就是这样做的:

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


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

您可以在用户和地址之间定义另一种关系,这种关系不会使用
lazy='noload'
加载(请参阅):

类似的问题请参见

def add_address(self, address):
    adds = self.addresses
    adds.append(address)
    self.addresses = adds
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)