orm 复习
day70 2018-05-14
1. 内容回顾
1. ORM
1. ORM常用字段和属性
1. AutoField(primary_key=True)
2. CharField(max_length=32)
3. IntgerField()
4. DateField()
5. DateTimeField()
1. auto_now_add --> 创建的时候自动填充当前时间
2. auto_now --> 每次修改的时候自动把当前时间更新
2. 关系字段
1. ForeignKey(to="类名",related_name=“xx”) --> 1对多 ,外键通常设置在多的那一边、
2. ManyToMany(to="类名",related_name="xx") --> 多对多,通常设置在正向查询多的那一边
3. ORM一般操作
1. 必知必会13条
1. 返回QuerySet对象的
1. all()
2. filter()
3. values()
4. values_list()
5. exclude()
6. order_by()
7. reverse()
8. distinct()
2. 返回具体对象的
1. get()
2. first()
3. last()
3. 返回布尔值的
1. exists()
4. 返回具体数值的
1. count()
2. 单表查询的双下划线
1. models.Book.objects.filter(id__gt=1)
2. models.Book.objects.filter(id__in=[1,2,3])
3. models.Book.objects.filter(id__range=[1,5])
4. models.Book.objects.filter(title__contains="沙河")
5. models.Book.objects.filter(title__icontains="沙河")
6. models.Book.objects.filter(title__startswith="沙河")
7. models.Book.objects.filter(title__endswith="沙河")
8. models.Book.objects.filter(publish_date__year=2017)
9. models.Book.objects.filter(publish_date__month=2)
3. 外键的跨表查询
1. 正向查找
1. 基于对象
book_obj = models.Book.object.get(id=1)
book_obj.publisher.name
2. 基于双下划线的
models.Book.object.filter(id=1).values("publisher__name")
2. 反向查找(由出版社查书)
1. 基于对象
publisher_obj = models.Publisher.objects.get(id=1)
默认反向查找的时候是表名加_set
publisher_obj.book_set.all()
如果在外键中设置了related_name="books"
publisher_obj.books.all()
2. 基于双下划线
models.Publisher.objects.filter(id=1).values("book__title")
如果配置了related_query_name="books"
models.Publisher.objects.filter(id=1).values("books__title")
4. 分组和聚合
1. 聚合
from django.db.models import Avg, Sum, Max, Min, Count
models.Book.objects.all().aggregate(Avg("price"))
2. 分组
book_list = models.Book.objects.all().annotate(author_num=Count("author"))
5. F和Q
1. 当需要字段和字段作比较的时候用F查询
2. 当查询条件是 或 的时候 用Q查询,因为默认的filter参数都是且的关系
6. 事务
1. 保证数据的原子性操作!!!
7. 执行原生的SQL语句(了解即可)
2. ORM 一对一
1. 什么时候用一对一?
当 一张表的某一些字段查询的比较频繁,另外一些字段查询的不是特别频繁
把不怎么常用的字段 单独拿出来做成一张表 然后用过一对一关联起来
2. 优势
既保证数据都完整的保存下来,又能保证大部分的检索更快
3. ORM中的用法
OneToOneField(to="")
3. ORM 多对多的三种方式
多对多的方式:
1. ORM自动帮我创建第三张表
2. 自己创建第三张表, 利用外键分别关联作者和书
关联查询比较麻烦,因为没办法使用ORM提供的便利方法
3. 自己创建第三张表,使用ORM 的ManyToManyFiled()
使用此种方式创建多对多表的时候,没有 add() remove() 等方法
我们应该用哪种?
看情况:
1. 如果你第三张表没有额外的字段,就用第一种
2. 如果你第三张表有额外的字段,就用第三种或第一种
相亲网站:
Boy
girls = ManyToManyField(to=“Girl")
Girl
约会记录:多对多
id boy_id girl_id date
4. ORM查询的练习题
1. 跨表查询
2. 跨多张表查询
5. csrf简单用法
什么是CSRF ?
跨站请求伪造,
问题:
1. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的?)
钓鱼网站的页面是由 钓鱼网站的服务端给你返回的
正经网站的网页是由 正经网站的服务端给你返回的
2. Django中内置了一个专门处理csrf问题的中间件
django.middleware.csrf.CsrfViewMiddleware
这个中间件做的事情:
1. 在render返回页面的时候,在页面中塞了一个隐藏的input标签
用法:
我们在页面上 form表单 里面 写上 {% csrf_token %}
<input type="hidden" name="csrfmiddlewaretoken" value="8gthvLKulM7pqulNl2q3u46v1oEbKG7BSwg6qsHBv4zf0zj0UcbQmpbAdijqyhfE">
2. 当你提交POST数据的时候,它帮你做校验,如果校验不通过就拒绝这次请求
作业:
1. 多对多的三种情况 自己整理下笔记
2. ORM查询练习
1. 正向查
2. 反向查
3. 跨表查
3. 预习
预习:
http://www.cnblogs.com/liwenzhou/p/8343243.html
orm 复习的更多相关文章
- 第五天.权限批量录入/更新、信号、Django日志配置
1. 角色.菜单.权限的增删该查 1. ModelForm增删改查 2. 增加和编辑使用同一个视图函数 Form() 1. 生成获取用户输入的标签 2. 对用户输入的内容做校验 3. 保留输入的内容同 ...
- Django复习之ORM
QuerySet数据类型: 1.可切片,可迭代 [obj,....] 2.惰性查询: ...
- Django之ORM查询复习与cookie
ORM查询总结: models.Book.objects.filter(**kwargs): querySet [obj1,obj2] models.Book.objects.filter(**kwa ...
- day 81 天 ORM 操作复习总结
# ###############基于对象查询(子查询)############## 一.对多查询 正向查询 from django.shortcuts import render,HttpResp ...
- django -xadmin 详解 功能实现及orm 的复习
django 在xadmin中自定义内容的变量及优化汇总 一: 首先下载xadmin pip install git+git://github.com/sshwsfc/xadmin.git@djang ...
- 写在复习MVC后
MVC的一些 今天把MVC复习了下,包括官方文档以及各种中文博客. 官方文档里面最能说明的问题的图片,相对于传统的MVC,苹果分离了View和Model之间的通信,实现了更好的复用性.我觉得MVC更 ...
- Django的ORM那些相关操作
一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 & ...
- ORM表相关操作
一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 > all(): 查询所有结果 > filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 > get( ...
- django orm 及常用参数
一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...
随机推荐
- mayan游戏
这道题超级好 就是我太菜了写了几个小时不算是debug了几个小时. 我只想出了几个小剪枝 可能是状态不太好吧 写完这道题真的是完美诠释了什么,叫做: 暴力出奇迹!!! 真的是太暴力了. 最多只移动5步 ...
- Mac 下安装Fiddler抓包工具
需求 我们都知道在Mac电脑下面有一个非常好的抓包工具:Charles.但是这个只能抓代理的数据包.但是有时候想要调试本地网卡的数据库 Charles 就没办法了.就想到了在windows下面的一个F ...
- 音频 m4a 转 wav
背景 最近做智能家居,需要用到一些应答词 需要自己录制.但是在mac下面通过 QuickTime 录制的是 m4a格式.但是应答词需要 wav格式.所以就需要转化了 解决方法 # sox 不行, ff ...
- SoupUI 5.1.2(专业版)下载(含破解文件)
包内含原安装包和破解文件,仅用于技术交流,切勿用于商业用途. 安装教程参考:https://www.cnblogs.com/miaojjblog/p/9778839.html 安装包及破解文件下载地址 ...
- 【托业】【跨栏】TEST04
16~20 16 17 18 19 20 REVIEW TEST4
- 浏览器User-Agent大全
what's the User-Agent UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你 ...
- 某平台实时数据录入js代码的修改坑点
在隐形内嵌函数使用的时候,很容易把这一点忘记了:内嵌函数不能修改外部函数的变量和参数 使用了mysql存储过程实现数据计算,导致高并发的时候数据库挂掉 mysql最大连接数调整到16384 之前为10 ...
- gitbook build/serve 失败,Error: ENOENT: no such file or directory, stat ...
我使用的 gitbook 版本 CLI version: 2.3.2 GitBook version: 3.2.3 在使用 gitbook 生成文档时,发现编译偶尔不规律性地出现错误 d:\Mine\ ...
- OI养老专题01:约瑟夫问题
有M个人,其编号分别为1-M.这M个人按顺序排成一个圈.现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人 ...
- spring boot入门小案例
spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,applica ...