Django中ORM创建表关系
一:django中ORM创建表关系
- ORM创建外键关系
1.表与表之间的关系
1.表与表之间的关系
一对多
一对一
多对多
2.操作目标条件:
图书表
出版社表
作者表
作者详情表
3.外键关联
一对多:
图书和出版社是一对多的关系 外键字段建在多的那一方 book
多对多:
图书和作者是多对多的关系 需要创建第三张表来专门存储
一对一:
作者与作者详情表是一对一
4.表关系的判断
换位思考
ORM针对外键字段的创建位置
1.不常用的数据我们称之为冷数据
2.常用的数据我们称之为热数据
一对多: 外键创建在多的一方
一对一: 建在任何一方都可以 但是推荐建在查询频率较高的表中
多对多: orm自动帮你创建第三张关联表
2.ORM中如何定义三种关系
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文件
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提前创建好库
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文件中书写固定的代码
2.在项目文件夹或者应用文件夹内的__init__.py文件中书写固定的代码
import pymysql
pymysql.install_as_MySQLdb()
在django1.X版本中外键默认都是级联更新删除的

Django中ORM创建表关系的更多相关文章
- Django之ORM多表关系创建
ORM模型多表逻辑创建: 以图书和作者关系模型为例: models.py from django.db import models ''' 一本书只能被一个出版社出版; 一个出版社可以出版多本书; 一 ...
- ORM以及Django使用ORM创建表
day61 2018-04-28 1. 内容回顾 1. HTTP协议消息的格式: 1. 请求(request) 请求方法 路径 HTTP/1.1\r\n k1:v1\r\n ...\r\n \r\n ...
- Python--day61--ORM介绍及Django使用ORM创建表
ORM: 使用django的ORM详细步骤:(pymysql操作数据库:) #1,自己动手创建数据库(create database 数据库名字;) #2,在Django项目中(setting.py文 ...
- django 数据库 ORM创建表单是出错
WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default' HINT: MySQL ...
- django中orm多表查询,减少数据库查询操作
.select_related() 的使用
- Django中ORM多对多表的操作
自己创建第三张表建立多对多关系 表的创建 # 老师表和学生表可以是一个多对多的关系,建表时可以手动建立第三张表建立关联 class Student(models.Model): name = mode ...
- Django中ORM介绍和字段及其参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)
Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...
- Django中ORM对数据库的增删改查操作
前言 什么是ORM? ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作. 简而言之,就是将数据库的一张表当作一个类,数据库中的每一条记录当作一个对象.在 ...
随机推荐
- LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]
LabVIEW是NI公司的数据采集设备的标准平台,在其上调用NI-DAQmx驱动和接口函数能够高效的开发数据采集和控制程序.但作为一种图形化的开发语言,使用LabVIEW开发涉及算法和流程控制的大型应 ...
- ELF文件格式学习总结
ELF文件格式学习总结 ELF文件格式学习总结1. 概述2. 目标文件结构3. ELF文件头3.1 魔数3.2 文件类型3.3 机器类型4. ELF文件内容4.1段表4.2字符串表(.**strtab ...
- echart实现实时疫情图
直接上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </h ...
- Android学习笔记5
SharedPreferenced的使用方法:SharedPreferences 是一个轻量级的存储类,主要是保存一些小的数据,一些状态信息 第一步:初始化 * 获取SharedPre ...
- 2022GDUT寒训专题一I题
题目 题面 给一个长度为 N的数组,一个长为 K的滑动窗体从最左端移至最右端,你只能看到窗口中的 K 个数,每次窗体向右移动一位,如下图: 窗口位置 最小值 最大值 [1 3 -1] -3 5 3 6 ...
- 使用 ES Module 的正确姿势
前面我们在深入理解 ES Module 中详细介绍过 ES Module 的工作原理.目前,ES Module 已经在逐步得到各大浏览器厂商以及 NodeJS 的原生支持.像 vite 等新一代的构建 ...
- Python小练习更改版(更改一部分代码,与错误)
之前上传的发现有部分代码错误,重新上传: 更改了第一次的代码与错误,增加了注释与商店部分功能: 没有每天坚持更新博客,与初衷相差甚远,坚持!每天进步一点点! user_list.txt 部分代码: { ...
- 开源免费的WordPress个人博客主题推荐
二次元动漫类个人主题 Sakura 功能强大,美观大气,二次元动漫专属 演示地址:https://2heng.xin/theme-sakura/ 开源地址:https://github.com/mas ...
- mybatis 原生写法创建项目
一.创建全局文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuratio ...
- HTML 5的革新——语义化标签
感谢原文作者:html5jscss 原文链接:http://www.html5jscss.com/html5-semantics-section.html 大佬的下一篇博文:http://www.ht ...