Django中ORM创建表关系

一:django中ORM创建表关系

  • ORM创建外键关系
1.表与表之间的关系
copy
1.表与表之间的关系 一对多 一对一 多对多 2.操作目标条件: 图书表 出版社表 作者表 作者详情表 3.外键关联 一对多: 图书和出版社是一对多的关系 外键字段建在多的那一方 book 多对多: 图书和作者是多对多的关系 需要创建第三张表来专门存储 一对一: 作者与作者详情表是一对一 4.表关系的判断 换位思考 ORM针对外键字段的创建位置 1.不常用的数据我们称之为冷数据 2.常用的数据我们称之为热数据 一对多: 外键创建在多的一方 一对一: 建在任何一方都可以 但是推荐建在查询频率较高的表中 多对多: orm自动帮你创建第三张关联表
2.ORM中如何定义三种关系
copy
1.一对多 (图书和出版社是一对多) 并且书是多的一方 所有外键字段放在书表里面 # 默认就是与出版社表的主键字段做外键关联 publish = models.ForeignKey(to='Publish') 如果字段对应的是Foreignkey 那么会orm会自动子啊字段的后面加_id 如果自己自作聪明的加了id 那么orm还是会在后面继续加_id 后面在定义Foreignkey的时候就不要自己加_id 2.多对多 # 自动帮你创建书籍和作者的第三张表 authors = models.ManyToManyField(to='Author') authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系 让orm自动帮你创建第三张关系表 3.一对一 # 作者与作者详细是一对一的关系 外键建在查询频率较高的表中 author_detail = models.OneToOneField(to='AuthorDetail') OneToOneField也会自动给字段加_id后缀 所有不要自作聪明 自己加后缀_id # 会自动在字段后面加_id后缀 ForeignKey OneToOneField
3.ORM创建表关系models.py文件
copy
from django.db import models # 图书表 class Book(models.Model): # title varchar(32) title = models.CharField(max_length=32) # 总共八位 小数点后面占两位 9价格) print = models.DecimalField(max_digits=8,decimal_places=2) # (图书和出版社是一对多) 并且书是多的一方 所有外键字段放在书表里面 # 默认就是与出版社表的主键字段做外键关联 publish = models.ForeignKey(to='Publish') """ 如果字段对应的是Foreignkey 那么会orm会自动子啊字段的后面加_id 如果自己自作聪明的加了id 那么orm还是会在后面继续加_id 后面在定义Foreignkey的时候就不要自己加_id """ # # 自动帮你创建书籍和作者的第三张表 authors = models.ManyToManyField(to='Author') # authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系 # 让orm自动帮你创建第三张关系表 # 出版社表 class Publish(models.Model): name = models.CharField(max_length=32) addr = models.CharField(max_length=32) # 作者表 class Author(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() # 作者与作者详细是一对一的关系 外键建在查询频率较高的表中 author_detail = models.OneToOneField(to='AuthorDetail') """ OneToOneField也会自动给字段加_id后缀 所有不要自作聪明 自己加后缀_id """ # 作者详细信息表 class AuthorDetail(models.Model): # phone 电话 phone = models.BigIntegerField() # 或者直接字符类型 # addr 地址 addr = models.CharField(max_length=32)
4.在settings.py配置文件修改配置
  • mysql提前创建好库
copy
1.在settings.py配置文件修改配置 """django默认使用自带的sqlite3""" DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day60', # 数据库名称 一定要事先创建好才能指定 'HOST':'127.0.0.1', # 数据库IP,暂用本地回环地址 'PORT':3306, # 数据库端口 'USER':'root', # 数据库用户名 'PASSWORD':'123', # 数据库密码 'CHARSET':'utf8' # 指定字符编码 } }
5.在项目文件夹或者应用文件夹内的__init__.py文件中书写固定的代码
copy
2.在项目文件夹或者应用文件夹内的__init__.py文件中书写固定的代码 import pymysql pymysql.install_as_MySQLdb() 在django1.X版本中外键默认都是级联更新删除的

image

posted @   AlexEvans  阅读(164)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
🚀