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

摘要:
Django表操作-表之间的关系(建立在MySQL上)数据表之间的关系有:一对多,多对多和一对一,在Django项目中做好建立表关系的准备数据表:book,book_detail,author,publish数据关系:多对多:book和author一对多:book和publish一对一:book和book_detail所有外键推荐建立在查询频率较高的那张表中#此处是models.py文件fromd

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

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

数据表:book,book_detail,author,publish

数据关系:

多对多:book和author

一对多:book和publish

一对一:book和book_detail

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

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

# 此处是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,除了创建这两个基表外,还需要额外创建第三张表来保存这两个基表之间的关系,表名以 主表名_外键表名命名,里面的字段为两个基表的主键

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

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

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

免责声明:文章转载自《Django 表操作-表之间的关系(建立在MySQL上)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android 启动模式介绍Swift网络封装库Moya中文手册之Targets下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用ElasticSearch服务从MySQL同步数据实现搜索即时提示与全文搜索功能

最近用了几天时间为公司项目集成了全文搜索引擎,项目初步目标是用于搜索框的即时提示。数据需要从MySQL中同步过来,因为数据不小,因此需要考虑初次同步后进行持续的增量同步。这里用到的开源服务就是ElasticSearch。 ElasticSearch是一个非常好用的开源全文搜索引擎服务,同事推荐之前我并没有了解过,但是看到亚马逊专门提供该服务的实例,没有...

ansible 的用法

ansible 常用模块 1 command 模块 默认模块,不指定 -m 参数时,使用的就是 command 模块; 但 "<", ">", "|", and "&" 操作都不可以,当然,也不支持管道; 缺点:不支持管道,没法批量执行命令; 示例: ansible 192.168.2.20 -m command -a 'ifconfi...

外键关联的修改 级联 修改表行记录的操作

外键关联的修改 ​ 场景: book表和publish表为多对一关系, book表的pid字段外键关联到了publish表的id字段 查看外键关系 show create table 表名; 删除外键关系 alter table book drop foreign key book_ibfk_1(外键名称) 删除字段 alter table publi...

Net Core SqlSuger Sql sever 迁移 Mysql

Mysql 安装 对该码农界的左登峰教程扩展第五步:密码位置截图 文件格式报错:wyx100 第六步:mysqld --install [服务名] ###(我觉得有必要起个好记的服务名)需要以管理员身份运行cmd Navicat15 安装 茶油树:破解教程 Navicat15 导入sql sever数据 一曲长歌,一...

PHP操作Redis数据库常用方法

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis支持的数据类型有 Stirng(字符串), List(列表), Hash(字典), Set(集合), Sorted Set(有序集合); 要让php能用上redis,首先就得安装redis扩展。 1.安装re...

【收藏】MySQL日期函数

MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | now() | +---------------------+ | 2008-08-08 22:20:46 | +-------------------...