在外键中声明级联与关系之间有什么区别?
class Contact(Base):
__tablename__ = 'contacts'
id = Column(Integer, primary_key=True)
addresses = relation("Address", backref="contact")
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
contact_id = Column(Integer, ForeignKey('contact.id', onupdate="CASCADE", ondelete="CASCADE")))
Run Code Online (Sandbox Code Playgroud)
VS
class Contact(Base):
__tablename__ = 'contacts'
id = Column(Integer, primary_key=True)
addresses = relation("Address", backref="contact", cascade="all, delete-orphan")
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
contact_id = Column(Integer, ForeignKey('contact.id'))
Run Code Online (Sandbox Code Playgroud)
使用外键声明,似乎级联是在数据库级别强制执行的.关系方法如何运作?谢谢!
在数据库级别上完成外键级联是正确的.也许不出所料,关系方法是在Python级别完成的.当从会话中刷新父级的删除时,SQLAlchemy读取关系并向所有成员发出删除,处理任何其他级联.
另请注意,如果使用数据库级联,则还需要配置关系以了解事实.
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |