orm层面的删除的注意事项
orm层面的删除
当两张表的外键约束设置为RESTRICT
or ACTION
时,在sql的层面上想要删除父级表的数据时吗,mysql会拒绝删除,但是
使用orm的delete还是会删除父级表的数据。orm会先将自表的外键设置为null,然后在去删除父表的数据,为了避免这种情况,外键应该设置为nullable=False
在sqlalchemy,只要将一个数据添加到session中,和它相关联的数据都可以一起存入到数据库中了。
这些是通过设置relationship的关键字参数cascade的来设置的:
1 .save-update
: 默认选项。在添加一条数据的时候,会把和它关联的数据都添加到数据库中。这种行为就是由save-update
属性影响的。
2 . delete
: 表示当删除某一个模型中的数据的时候,是否也删除使用relationship和他关联的数据。
3 .delete-orphan
:表示当对一个orm对象解除了父表中的关联对象的时候,自己便会被删掉。当然如果父表中的数据被删除,自己也会变删除。这个选项只能用在一对多上,不猛用在多对多以及多对一上。并且还需要子模型中的relationship
中,增加一个single_parent=True
.
4 .merge
: 默认选项,当在使用session.merge
, 合并一个对象的时候,会将使用了relationship
相关联的对象也进行merge
操作。
5 . expunge
: 移除操作的时候,会将相关联的对象也进行删除。这个操作只是从session中删除,并不会真正的从数据库中删除。
6 . all
:是对save-update, merge, refresh-expire, expunge, delete
几种的缩写。
cascade的选项可以有多个,中间用英文的逗号隔开
最新文章
- 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境
- sublime Text-Theme
- SQL Server 2012 自动增长列,值跳跃问题
- gitlab 无法查看提交的文件Errno::ENOMEM (Cannot allocate memory - /opt/gitlab/embedded/bin/git):
- Bower In ASP.NET Core
- Servlet配置信息
- 【HTML】Advanced5:Accessible Forms
- C程序设计的抽象思维-算法分析-大多数元素
- Xtext什么
- Python学习笔记——基础篇【第五周】——模块
- Shell命令-文件及内容处理之head、tail
- 四种常见的 POST 提交数据方式对应的content-type取值
- 网页编程工具:EditPlus
- java8 parallel并行处理实战
- C#中使用log4net框架做日志输出
- Azure 元数据服务:适用于 Windows VM 的计划事件(预览)
- 【TensorFlow】tf.nn.embedding_lookup函数的用法
- python各类项目模块记录
- Redis之字符串类型命令
- Redis(六)-- SpringMVC整合Redis
热门文章
- vue中nextTick的使用场景
- Flutter Weekly Issue 47
- P5596 【XR-4】题 笔记
- c#序列化和反系列化json与类型对象转换
- SpringCloud学习系列<;一>;版本介绍
- 【转】在Eclipse下,出现“找不到或无法加载主类 ”的问题的解决方式
- jQuery的简单用法(jQuery的简介,选择器,属性和css,文档处理)
- golang超级mapper包 - coven
- 通达OA rce复现
- python中使用openpyxl模块时报错: File is not a zip file