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的选项可以有多个,中间用英文的逗号隔开

最新文章

  1. 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境
  2. sublime Text-Theme
  3. SQL Server 2012 自动增长列,值跳跃问题
  4. gitlab 无法查看提交的文件Errno::ENOMEM (Cannot allocate memory - /opt/gitlab/embedded/bin/git):
  5. Bower In ASP.NET Core
  6. Servlet配置信息
  7. 【HTML】Advanced5:Accessible Forms
  8. C程序设计的抽象思维-算法分析-大多数元素
  9. Xtext什么
  10. Python学习笔记——基础篇【第五周】——模块
  11. Shell命令-文件及内容处理之head、tail
  12. 四种常见的 POST 提交数据方式对应的content-type取值
  13. 网页编程工具:EditPlus
  14. java8 parallel并行处理实战
  15. C#中使用log4net框架做日志输出
  16. Azure 元数据服务:适用于 Windows VM 的计划事件(预览)
  17. 【TensorFlow】tf.nn.embedding_lookup函数的用法
  18. python各类项目模块记录
  19. Redis之字符串类型命令
  20. Redis(六)-- SpringMVC整合Redis

热门文章

  1. vue中nextTick的使用场景
  2. Flutter Weekly Issue 47
  3. P5596 【XR-4】题 笔记
  4. c#序列化和反系列化json与类型对象转换
  5. SpringCloud学习系列<一>版本介绍
  6. 【转】在Eclipse下,出现“找不到或无法加载主类 ”的问题的解决方式
  7. jQuery的简单用法(jQuery的简介,选择器,属性和css,文档处理)
  8. golang超级mapper包 - coven
  9. 通达OA rce复现
  10. python中使用openpyxl模块时报错: File is not a zip file