我在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 :(得分: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)