Django如何在mysql中建表_Django 表操作-表之间的关系(建立在MySQL上)

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

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

数据表:book,book_detail,author,publish

数据关系:

多对多:book和author

一对多:book和publish

一对一:book和book_detail

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

0b7c839d767b39d3b671576ccd8f1d81.png

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

f397a5ff568e25fc142f7acdb61730bb.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值