Django项目的ORM操作之--模型类数据查询
1.查询基本格式及理解: 类名.objects.[查询条件]
例如我们要查询数据库中一张表(bookinfo)的所有数据,sql语句为:select * from bookinfo,
对应模型类的操作是: BookInfo.objects.all()
cd到当前django项目的目录下,进入携带django环境的python解释器进行测试操作:
$ python manage.py shell
$ from book_app.models import *
即可进行模型对象的语句语句操作,执行以下语句看看我们查询的到底是什么东西
$ type(BookInfo.objects) --> <class 'django.db.models.manager.Manager'>
$ type(BookInfo.objects.all()) --> <class 'django.db.models.manager.Manager.QuerySet'>
$ type(BookInfo.objects.all()[0]) --> <class 'django.db.models.manager.Manager.BookInfo'>
也就是说,objects是一个模块对象管理器,objects.all是一个查询集QuerySet,
取查询集的第一个元素QuerySet[0],可以看到查询集里面存的元素就是符合条件的我们设计表时所创建类BookInfo的实例对象
QuerySet查询集支持小标和切片,切片返回的是一个新的查询集
2.查询集之过滤器:
多对象过滤器:
all() --> 返回所有数据
filter([条件]) --> 返回满足条件的所有数据
exclude([条件]) --> 返回满足条件外的所有数据
order_by([条件]) --> 根据条件排序,并返回 (可以用'-'实现倒序)
单对象过滤器:
get([条件]) --> 返回满足条件的单个数据;如果未找到将抛出异常:DoesNotExist;如果找到的是多条将抛出异常:MultipleObjectsReturned
count() --> 返回查询结果总数
aggregate() --> 聚合,返回一个字典 (聚合函数:Avg、Max、Min、Sum、Count,例: objects.aggregate(Sum("name")))
判空:
exists() --> 判断查询集中是否有数据,有为True
返回具体对象属性值:
values([属性名]) --> 返回一个列表,以字典形式存放所有对象的属性值
values_list([属性名]) --> 返回一个列表,以列表形式存放所有对象的属性值
3.filter查询集的条件查询:
查询条件的格式: [属性名称]__[运算符]=[值] (注意是两个"_",我们在对属性命名时不允许使用双"_")
属性大小、范围查询:
等于:属性=值 大于:属性__gt=值 大于等于:属性__gte=值
小于:属性__lt=值 小于等于:属性__lte=值 范围:属性_in=值(值应为可选项的列表,例: id_in=[1,3,5],指定id=1、3、5的3个数据)
查询属性为空的/不为空:
属性__isnull=True/False
属性模糊查询:
指定开头:属性__startwith=值 指定结尾:属性__endwith=值
指定日期(属性值应为日期相应类型):属性_year=值 属性_month=值(例:birthday_month=11,指定birthday的月份为11月的数据)
F对象和Q对象: 需先导入: from django.db.models import F,Q
F对象:不知道某个属性的值,也可以用它来进行比较,例: filter(read_gt=F('comment')*2), 查询阅读数量大于评论数量2倍的数据
Q对象:实现逻辑与、非的查询
与: objects.filter(read_gt=20).filter(comment_gt=20) 阅读和评论数都大于20
或: objects.filter(Q(read_gt=20 | comment_gt=20)) 阅读数大于20或评论数大于20
非: objects.filter(-Q(read_gt=20)) 阅读数不大于20
4.过滤器的特性:懒惰和缓存
懒惰:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用等
缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询集时会使用缓存的数据。
Django项目的ORM操作之--模型类数据查询的更多相关文章
- Django项目的ORM操作之--数据模型类创建
在django项目中,其自带了ORM(Object Relation Mapping)对象关系映射框架,我们在django项目下app的models模块下对类进行操作,通过ORM会将我们对类的操作转化 ...
- Django学习之ORM操作
一.一般操作 二.必知必会13条 返回QuerySet对象的方法有 特殊的QuerySet 返回具体对象的 返回布尔值的方法有 返回数字的方法 三.单表查询之神奇的双下划线 四.ForeignKey操 ...
- Django专题之ORM操作2
Django ORM操作 目录 一般操作 看专业的官网文档,做专业的程序员! 回到顶部 必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs ...
- 跨过Nginx上基于uWSGI部署Django项目的坑
先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多 ...
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...
- Django - 表与ORM操作
Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...
- 初学Django基础02 ORM操作
django的ORM操作 之前我们知道了models.py这个文件,这个文件是用来读取数据结构的文件,每次操作数据时都走这个模块 常用字段 AutoField int自增列,必须填入参数 primar ...
- docker笔记(3) ------Django项目的docker部署
2019-01-12 14:23:18 django容器连接到mysql_server容器分析:原myblog项目使用sqlit3数据库,使用mysql容器前需要在django中加入pymysql ...
- Django基础之ORM操作
################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...
随机推荐
- Python3.x:将数据下载到xls时候用xml格式保存一份读取内容
Python3.x:将数据下载到xls时候用xml格式保存一份读取内容 核心代码: import json import xml.dom.minidom from urllib import requ ...
- ubuntu 12.04网络设置
1.服务器版本 设置IP地址 ubuntu 12.04的网络设置文件是/etc/network/interfaces,打开文件,会看到 auto lo iface lo inet loopback 这 ...
- 【转载】解决window.showModalDialog 模态窗口中location 打开新窗口问题
来源: <http://bibipear.blog.sohu.com/143449988.html> 在我们的项目中,通常会用到showModalDialog 打开一个模态的子窗口,但是在 ...
- 搭建ODS的几套解决方案对比
公司业务,想要搭建一个医院的ODS服务器:将医院不同厂家的不同数据库版本数据库类型整到一台服务器中,最初想要是同步数据库原生同步机制,最理想的是sqlserver发布订阅,但是后来发现发布订阅不能发布 ...
- MongoDB 性能优化
Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...
- 【尺度不变性】An Analysis of Scale Invariance in Object Detection – SNIP 论文解读
前言 本来想按照惯例来一个overview的,结果看到1篇十分不错而且详细的介绍,因此copy过来,自己在前面大体总结一下论文,细节不做赘述,引用文章讲得很详细,另外这篇paper引用十分详细,如果做 ...
- 跟着vamei复习概率论
最近重新看了一下概率论,感觉很多东西都遗忘了,还会陷入各种误区,赶紧的纠正回来. 概率论这块,主要内容包括: 事件.条件概率.随机变量.随机变量的分布函数.概率密度.联合分布.期望.方差.协方差. 我 ...
- Mysql建表好的例子
1. DROP TABLE IF EXISTS `sys_warehouse_area`;CREATE TABLE `sys_warehouse_area` ( `id` bigint(20) NOT ...
- SQL优化- in和not in
in不会导致索引失效,但最终数据库会将in语句解析为or语句,eg: select * from T_MAIN_PROCESS t where t.audit_status_code in ('05' ...
- 调试bug的几种方法
1.php中的dump,echo,exit 2.浏览器的f12 3.安装xdebug扩展(debugger调试器,profiler探查器,trace代码跟踪) profile日志能记录函数的执行耗时和 ...