Django ORM
Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
目录* Django ORM
+ ORM实操之数据库迁移
+ ORM实操之字段的修改
+ ORM实操之数据的增删改查
+ 数据库同步
+ ORM创建表关系
- Django请求生命周期流程图
- 路由匹配
- 无名分组
- 有名分组
- 反向解析
- 无名分组和有名分组反向解析
Django ORM
ORM:对象映射关系程序
通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言;
python与MySQL映射关系
Python | 映射 | MySQL |
---|---|---|
类 | -------> | 表 |
对象 | -------> | 表里面的数据 |
对象点属性 | -------> | 字段对应的值 |
ORM实操之数据库迁移
✨我们的模型类需要写在应用下的models.py文件中
# SQL原生语句和ROM创建的区别class User(models.Model):# id int primary key auto\_incrementid = models.AutoField(primary_key=True)# name varchar(32)name = models.CharField(max_length=32) # CharField必须要加max\_length参数# age intage = models.IntegerField()
✨✨✨数据库迁移命令(重点)
- 只要修改了
models.py
文件执行了和数据库相关的命令,就重新执行下面这两条命令:python3 manage.py makemigrations、python3 manage.py migrate - 或者打开Tools,点击
RUN manage.py Task
,输入makemigrations
1.将数据库修改操作先记录到"本本"(对应应用下的migrations文件夹)python3 manage.py makemigrations
# 执行完,产生一个文件,用来记录
2.真正的执行数据库迁移操作,同步到数据库python3 manage.py migrate
# 执行完会在数据库中产生Django所需的依赖表,自动创建的
# 自己创建的表user以'应用名\_表名'的形式创建,app01\_user
✨✨不指定id字段和主键等,ORM会自动创建id
# 如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段
class user(models.Model):username = models.CharField(max_length=32)# 就不用写id了···,需要定制id,就写上~
ORM实操之字段的修改
# 原来的表
class user(models.Model):username = models.CharField(max_length=32)# 增加字段(两种方法)password = models.IntegerField('密码',null=True) # 该字段可以为空is_delete = models.IntegerField(default=0) # 默认值# 修改字段
直接改代码,然后执行makemigrations,数据库迁移
# 删除
直接删除或者注释掉代码,然后执行makemigrations,数据库迁移
ORM实操之数据的增删改查
查询操作
username = request.POST.get('username')
# 获取用户post从页面提交的数据,username是获取到用户提交的数据# 1.查询数据
# select * from user where name=username;
user_obj_list = models.User.objects.filter(name=username) # 获取到的是列表,看成列表套数据对象
obj_info = user_obj_list[0]
# 获取id、name、age
print(obj_info.id, obj_info.name, obj_info.age) # 1 hammer 18
# 或这下面这样提取列表数据也可以
user_obj = models.User.objects.filter(name=username).first()
'''如果用户提交的信息不存在返回None'''# 登录功能示例
user_check = models.User.objects.filter(name=username,password=password).first() # 等价于select * from user where name=username and pwd = password
if user_check:return HttpResponse('登录成功')
# 2.添加数据
# insert into user(name,pwd) values(username,password);
models.User.objects.create(name=username,pwd=password)# 3.查询所有的数据,展示所有数据到前端页面,通过for循环在html页面获取表数据
# select * from user;
models.User.objects.all() # 返回列表[obj1,obj2,obj3,obj4]# 4.修改数据
models.User.objects.filter(id=edit_id).update(name=username,pwd=password)
# 或者
edit_obj.name = username
edit_obj.pwd = password
edit_obj.save()# 5.删除数据
models.User.objects.filter(id=delete_id).delete()
数据库同步
- 数据库迁移命令,链接
python manage.py makemigrations
2. inspectdb 表名
语句反向操作数据库,反向输出sql语句对应的类
ps:如果inspectdb
后不跟表名,那么就会将该数据库内的所有表反向解析成类(python语句)
# 数据库里面已经有一些表,我们如何通过django orm操作?
1.照着数据库表字段自己在models.py
2.django提供的反向同步操作:
1.先执行数据库迁移命令 完成链接python manage.py makemigrations
2.查看代码python manage.py inspectdbclass Userinfo(models.Model):id = models.IntegerField(blank=True, null=True)name = models.CharField(max_length=32, blank=True, null=True)pwd = models.IntegerField(blank=True, null=True)class Meta:managed = Falsedb_table = 'userinfo'
ORM创建表关系
表与表之间的关系有一下三种:
一对多、多对多、一对一,没关系暂且排外,下面演示如何通过ORM来创建外键确立表关系~
ORM创建外键字段的位置:
- 一对多:创建在多的一方
- 一堆一:创建在任何一方都可以,但是推荐创建在查询频率较高的表中
- 多对多(两种方式):
- 自己创建第三张表
- 创建在任何一方都可以,但是推荐创建在查询频率较高
# 创建书籍表 出版者表 作者表
# 先写表的基本结构,在考虑表关系如何写外键# 书籍表
class Book(models.Model):name = models.CharField(max_length=32)price = models.DecimalField(max_digits=8, decimal_places=2) # 总共8位 小数占2位# 作者外键Author = models.ManyToManyField(to='Author')# 出版社外键Publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)# 作者表
class Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()Atuhor_Detail = models.OneToOneField(to='Atuhor\_Detail',on_delete=models.CASCADE)# 作者详情表
class Atuhor_Detail(models.Model):phone = models.BigIntegerField()Email = models.EmailField()# 出版社表
class Publish(models.Model):name = models.CharField(max_length=32)address = models.CharField(max_length=32)
注意:
- 外键不需要写id,会自动添加id,比如author_id,不需要写_id,orm自动补充
- ORM自动创建书籍和作者的第三张表,只有多对多关系表被单独创建出来
- 外键被当作虚拟字段,创建表完成后,不会实例化出来,而是告诉了ORM创建第三张表的关系
- Django2.0版本以上,在创建外键和一对一关系的时候,需要添加级联更新参数
on_delete=models.CASCADE
,不然会报错,只有OneToOneField和ForeignKey需要写,ManyToManyField不需要
# django 升级到2.0之后,表与表之间关联的时候,必须要写on\_delete参数,否则会报异常:
# TypeError: init() missing 1 required positional argument: ‘on\_delete’Atuhor_Detail = models.OneToOneField(to='Atuhor\_Detail',on_delete=models.CASCADE)
Publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)
Django请求生命周期流程图
路由匹配
- 路由:通俗理解为除去ip和port之后的地址
Django ORM相关推荐
- Django ORM操作
Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...
- django mysql orm教程_带你了解Django ORM操作(基础篇)
前言 在日常开发中,需要大量对数据库进行增删改查操作. 如果头铁的话,使用原生SQL是最好的,毕竟性能又高,又灵活. 但是通常情况下,我们不是太需要那么苛刻的性能,也没有那么多刁钻的需求用原生SQL ...
- Django ORM那些相关操作
一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/ 官网文档 常用的操作 <1> all() ...
- django orm级联_Django数据表关联关系映射(一对一、一对多、多对多)
我们知道涉及到数据表之间的对应关系就会想到一对一.一对多.多对多,在学习 MySQL 数据库时表关系设计是需要重点掌握的知识.Django 中定义了三种关系类型的字段用来描述数据库表的关联关系:一对多 ...
- django ORM相关的那些操作汇总
必知必会13条 <1> all(): 查询所有结果<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象<3> get(**kwargs): ...
- django ORM中的RelatedManager(关联管理器)
关联管理器应用在 一对多的表 或者 多对多的表 多对多表中的用法: 在多对多的表中 正向查询 #基于对象的查询 #正查 # author_obj = Author.objects.get(id=1) ...
- Django ORM 知识点总结
Query是如何工作的 Django QuerySet是懒执行的,只有访问到对应数据的时候,才会去访问数据库.另外如果你再次读取查询到的数据,将不会触发数据库的访问,而是直接从缓存获取. 比如 # 这 ...
- Django - ORM操作
Django - ORM操作 一. 必知必会13条 单表查询之神奇的双下划线 二. ForeignKey操作 正向查找 反向操作 三. ManyToManyField 四. 聚合查询和分组查询 聚合 ...
- Django ORM 数据库操作
比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 ...
最新文章
- xdoj 易碎的鸟蛋(鹰蛋实验)
- zabbix icmp ping 监控主机_Zabbix监控 MySQL 性能
- java 如何将word 转换为ftl_使用 freemarker导出word文档
- 【CodeForces - 155C】Hometask (字符串,思维,贪心,熟悉句式)(总结)
- Python+pandas读取Excel文件统计最受欢迎的前3位演员
- Python:遍历指定目录下所有的c语言源代码文件
- 大数据平台的整体架构由哪些组成
- 使用IDEA回退SVN到某个历史版本
- 如何卸载Adobe Creative Cloud 桌面应用程序
- Ubuntu16.04 忘记登陆密码 重新设置密码
- Unity 在安卓手机上实时调试
- Thief-Book v1.0.1免费版
- OSM数据下载及两种格式转换方法(shp等格式)
- Thinkphp5乐兔CRM之Mockplus 原型设计的登录页
- 摄影测量学和计算机视觉,科学网—摄影测量与计算机视觉——系列1 光与视觉 - 季顺平的博文...
- 棋盘游戏(BFS、DFS)
- 前车之鉴,后事之师——跨境多地域云仓储设计和实践
- Start Developing iOS Apps (Swift) 学习笔记 (1)
- 一个隐藏文件夹的方法
- 脚本语言和编程语言的区别和定义