/ / sqlalchemy: quelle est la différence entre déclarer la cascade dans la relation clé étrangère vs relation? - sqlalchemy

sqlalchemy: quelle est la différence entre déclarer la cascade dans la relation clé étrangère vs relation? - sqlalchemy

Quelle est la différence entre déclarer la cascade dans une clé étrangère vs relations?

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

contre

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

avec la déclaration de clé étrangère, il semble que la cascade soit appliquée au niveau de la base de données. Comment fonctionne l'approche relationnelle? Merci!

Réponses:

6 pour la réponse № 1

Vous avez raison de dire que la cascade de clés étrangères estfait au niveau de la base de données. Peut-être sans surprise, l'approche relationnelle est faite au niveau Python. Lorsque la suppression du parent est supprimée de la session, SQLAlchemy lit dans la relation et envoie la suppression à tous les membres, en traitant toutes les autres cascades.

Notez également que si vous utilisez la cascade de la base de données, vous devrez également configurer la relation pour en être conscient.