zoukankan      html  css  js  c++  java
  • Python Django orm操作数据库笔记之外键和表关系

    外键

    MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。

    外键的使用

    • 使用外键前需要先确保相应外键已存储在数据库中(flask中会在你引用时自动保存相应外键)。
    • 如果想要引用另外一个app的模型,那么应该在传递to参数的时候,使用app.model_name进行指定。
    • 如果模型的外键引用的是本身自己这个模型,那么to参数可以为'self',或者是这个模型的名字。 

    外键的删除

    如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作。可以通过on_delete来指定。可以指定的类型如下:

    1. CASCDE:级联删除,即如果这条数据中外键对应的数据被删除了,那么这条数据也将被删除。
    2. PROTECT:受保护。如果要删除这条数据中外键对应的数据,系统将会报错,即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。
    3. SET_NULL:设置为空,即如果这条数据中外键对应的数据被删除了,那么这条数据的相应字段将设置为空。需要注意,使用这个方法需保证当前字段可以为空,可用null=True的方法来设置。
    4. SET_DEFAULT:设置为默认值,即如果这条数据中外键对应的数据被删除了,那么这条数据的相应字段将设置为默认值。需要注意,使用这个方法需保证当前字段已指定默认值,可用default=(某固定值/函数)的方法来设置。
    5. SET():功能与SET_DEFAULT类似,即如果外键对应的那条数据被删除了。那么将会获取SET函数中的值来作为这个外键的值。SET函数可以接收一个可以调用的对象(比如函数或者方法),如果是可以调用的对象,那么会将这个对象调用后的结果作为值返回回去。
    6. DO_NOTHING:不采取任何行为。一切全看数据库级别的约束。

    表关系

    表之间的关系都是通过外键来进行关联的。而表之间的关系,无非就是三种关系:一对一、一对多(多对一)、多对多等。以下将讨论一下三种关系的应用场景及其实现方式。

    注:在`一对多(多对一)`的情况下`多`的那方是`外键的引用方`也就是模型属性包含相应外键的那方,`一`的那方是`被外键引用的那方`也就是模型属性不包含相应外键的那方

    一对多

    • 场景说明:比如文章和作者之间的关系。一个文章只能由一个作者编写,但是一个作者可以写多篇文章。文章和作者之间的关系就是典型的多对一的关系。
    • 如果当前模型被其他模型通过外键的形式引用,那么django会自动为该模型生成一个方法,该方法通过引用模型名的小写 + _ + set的形式调用,这个方法与一般模型中的objects方法类似,可使用all()、get(),first()、filter()等方法获取里面的数据。如果需要将一篇文章添加到某个
  • 相关阅读:
    python的复制,深拷贝和浅拷贝的区别(转)
    linux下ffmpeg安装(转)
    Linux下的tar压缩解压缩命令详解(转)
    centos7安装python-pip(转)
    爬山算法和模拟退火算法简介
    协方差、协方差矩阵定义与计算
    七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
    Canny边缘检测算法原理及其VC实现详解(二)
    Canny边缘检测算法原理及其VC实现详解(一)
    perforce变量配置与使用
  • 原文地址:https://www.cnblogs.com/biechishaobing/p/10359145.html
Copyright © 2011-2022 走看看