• Django 表操作-表之间的关系(建立在MySQL上)


    Django 表操作-表之间的关系(建立在MySQL上)

    数据表之间的关系有:一对多,多对多和一对一,在Django项目中做好建立表关系的准备

    数据表:book,book_detail,author,publish

    数据关系:

    多对多:book和author

    一对多:book和publish

    一对一:book和book_detail

    所有外键推荐建立在查询频率较高的那张表中

    # 此处是models.py 文件
    from django.db import models
    
    
    # 1.创建基本表对应的类
    class Book(models.Model):
        b_id = models.AutoField(primary_key=True)
        book_name = models.CharField(max_length=32)
        # DecimalFeild表示该字段是小数,max_digits表示数字位数,decimal_places表示保留小数位数,这个表示price为小数字段,总共8位,小数位占2位
        price = models.DecimalField(max_digits=8, decimal_places=2)
        is_delete = models.IntegerField(default=0)
        
        '''2.创建一对多的表关系:models.ForeignKey()
        book表和publish表是一对多的外键关键,创建外键关系
        默认关联字段是publish表的主键字段
        to='Publish' 也可以写成to=Publish,即to=表的变量名,但要保证,该变量名在当前类的上方,不推荐这种方式
        '''
        publish = models.ForeignKey(to='Publish')
        
        '''3.创建多对多的表关系:models.ManyToManyField()
        book表和author表是多对多的外键关系,创建外键关系
        注意:authors字段是虚拟字段,Django在创建同步数据库的过程中,不会创建该字段,而是创建book和auth这两张表之间的关系需要创建第三张表
        '''
        authors = models.ManyToManyField(to='Author')
        
        '''4.创建一对一的表关系:models.OneToOneField()
        '''
        book_detail = models.OneToOneField(to='BookDetail')
        
        
    class BookDetail(models.Model):
        d_id = models.AutoField(primary_key=True)
        content = models.CharField(max_length=128)
        sale_num = models.IntegerField()
        star = models.IntegerField()
        
        
    class Publish(models.Model):
        p_id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=64)
        addr = models.CharField(max_length=64)
        
        
    class Author(models.Model):
        a_id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        phone = models.BigIntegerField()
    

    总结:

    创建外键,分为三种关系

    注意:表对应的类和对应关系创建完成后,一定要执行提交命令!!!

    1.一对多:变量名 = models.ForeignKey(to='外键表名称')

    Django会自动告知MySQL,该外键字段需增加 id 后缀,因此在定义变量时,不需要自行指定该变量是外键表的主键,Django已自行增加了

    2.多对多:变量名 = models.ManyToManyField(to='外键表名称')

    • Django会自动告知MySQL,该外键字段需增加 id 后缀,因此在定义变量时,不需要自行指定该变量是外键表的主键,Django已自行增加了
    • Django 根据ManyToManyField,告知MySQL,除了创建这两个基表外,还需要额外创建第三张表来保存这两个基表之间的关系,表名以 主表名_外键表名命名,里面的字段为两个基表的主键

    3.一对一:变量名 = models.OneToOneField(to='外键表名称')

    Django会自动告知MySQL,该外键字段需增加 id 后缀,因此在定义变量时,不需要自行指定该变量是外键表的主键,Django已自行增加了

  • 相关阅读:
    OpenCV 脸部跟踪(2)
    OpenCV 脸部跟踪(1)
    opencv2.4中SVD分解的几种调用方法
    OpenCV教程(42) xml/yaml文件的读写
    OpenCV教程(41) 人脸特征检测
    OpenCV学习(40) 人脸识别(4)
    OpenCV学习(39) OpenCV中的LBP图像
    目标检测的图像特征提取之(三)Haar特征
    目标检测的图像特征提取之(二)LBP特征
    目标检测的图像特征提取之(一)HOG特征
  • 原文地址:https://www.cnblogs.com/xiaodan1040/p/12158000.html
Copyright © 2020-2023  润新知