【Flask数据库】relationship方法中的cascade参数详解(1-2)

本文详细解析了SALAlchemy ORM中relationship的cascade参数,包括如何配置及其实现的功能。cascade参数用于控制关联数据的保存、删除等行为,如自动保存关联数据、删除关联数据等。同时,文章提供了save-update和delete操作的例子,帮助理解cascade在实际应用中的作用。

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

一、ORM层面的CASCADE

在SALAlchemy中,只要将一条数据添加到session中,和他相关联的数据都可以一起存入。这其实是通过relationship对象创建时传入关键字参数cascade实现的,另外,也可在backref中传入casecade关键字:

1.save-update:

默认选项,自动把其他关联数据添加到数据库中就是这条实现的。若不想同步添加,令cascade=''

2.delete

表示当删除某一个模型中的数据的时候,是否也删掉使用relationship和他关联的数据。

3.delete-orphan

表示当对一个ORM对象解除了父表中的关联对象的时候,自己便会被删除掉(即子表中的某条数据没有了关联数据,则该条数据会被自动删除掉)。当然如果父表中的数据被删除,自己也会被删除。这个选项只能用在一对多上,不能用在多对多以及多对一上。并且还需要在子模型中的relationship中,增加一个single_parent=True的参数。

4.merge

默认选项。当在使用session.merge,合并一个对象的时候,会将使用了relationship相关联的对象也进行merge操作。如user表中已有一条数据id=1,而脚本中另外生成了一条id=1的数据,那么就可用merge覆盖掉原数据及相关联数据。实际项目使用较少。

5.expunge

移除操作的时候,会将相关联的对象也进行移除。这个操作与session.delete(obj)不同,它只是从session中移除,并等到session.commit()时不会真正的从数据库中删除。实际项目使用较少。

6.all

是对save-update, merge, refresh-expire(极少用), expunge, delete几种的缩写。


二、save-update及delete例子

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值