flask-SQLAlchemy 一对多级联删除

本文介绍如何使用SQLAlchemy实现级联删除,通过设置relationship的cascade属性来实现在删除主表记录时同时删除从表相关记录的功能,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

!本文转载于:悠悠的博客优快云

级联删除

一对多关系,当删除主表数据的时候,关联表数据一起删除

实例

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    addresses = db.relationship('Address', backref='person', cascade="all,delete")
在 relationship 加cascade="all,delete" 属性

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    person_id = db.Column(db.Integer, db.ForeignKey('person.id'))

其它关联删除方式

    # 只删除父级,子不影响
    # 1. addresses = db.relationship('Address', backref='person',  passive_deletes=True)

    # 子级跟随删除
    # 2. addresses = db.relationship('Address', backref='person', cascade="all, delete-orphan")
    # 3. addresses = db.relationship('Address', backref='person', cascade="all, delete")

    # 父级删除,子级不删除,外键更新为 null
    # 4. addresses = relationship("Address", backref = backref("child"))

新增与删除

新增数据

        person = Person(name='yoyo')
        person.addresses = [
            Address(email='123@qq.com')
        ]
        db.session.add(person)
        db.session.commit()  # 提交

删除Person 表数据,关联表一并删除

        p = Person.query.filter_by(name='yoyo').first()
        db.session.delete(p)
        db.session.commit()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值