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操作之--模型类数据查询的更多相关文章

  1. Django项目的ORM操作之--数据模型类创建

    在django项目中,其自带了ORM(Object Relation Mapping)对象关系映射框架,我们在django项目下app的models模块下对类进行操作,通过ORM会将我们对类的操作转化 ...

  2. Django学习之ORM操作

    一.一般操作 二.必知必会13条 返回QuerySet对象的方法有 特殊的QuerySet 返回具体对象的 返回布尔值的方法有 返回数字的方法 三.单表查询之神奇的双下划线 四.ForeignKey操 ...

  3. Django专题之ORM操作2

    Django ORM操作   目录 一般操作 看专业的官网文档,做专业的程序员! 回到顶部 必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs ...

  4. 跨过Nginx上基于uWSGI部署Django项目的坑

    先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多 ...

  5. Python/Django(CBV/FBV/ORM操作)

    Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...

  6. Django - 表与ORM操作

    Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...

  7. 初学Django基础02 ORM操作

    django的ORM操作 之前我们知道了models.py这个文件,这个文件是用来读取数据结构的文件,每次操作数据时都走这个模块 常用字段 AutoField int自增列,必须填入参数 primar ...

  8. docker笔记(3) ------Django项目的docker部署

    2019-01-12   14:23:18 django容器连接到mysql_server容器分析:原myblog项目使用sqlit3数据库,使用mysql容器前需要在django中加入pymysql ...

  9. Django基础之ORM操作

    ################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...

随机推荐

  1. 在python3下使用OpenCV 抓取摄像头图像提取蓝色

    工作中需要对摄像头进行调试, Python平台大大提高调试效率. 从网找到段代码, 可以从摄像头图像中抠出蓝色. import cv2 import numpy as np cap  = cv2.Vi ...

  2. JS变量比较陷阱

    我们觉得JS简单是因为它是弱类型的语言,不像java那样对对类型那样敏感,但js也有其不尽人意的地方. 在java中我们无法将数字与字符串直接比较,而js能,而且能直接转换成数值比较,但是如果是字符串 ...

  3. 照着官网来安装openstack pike之安装dashboard

    上文提到了利用命令行下使用openstack的命令来创建虚拟机,这里选择安装dashboard来安装基于web界面的openstack平台 利用dashboard界面来创建虚拟机 dashboard这 ...

  4. 20145312 《Java程序设计》第三周学习总结

    20145312 <Java程序设计>第三周学习总结 学习笔记 Chapter 4 4.1类与对象 4.1.1 定义类 1.以服饰设计为例,类定义用class关键词,建立衣服实例要用new ...

  5. Java学习笔记-方法引用

    方法引用(Method Reference) 上一篇中记录了Lambda表达式,其可以创建匿名方法.当Lambda表达式只是调用一个存在的方法时,可以采用方法引用(JDK8具有的特性).如下: pub ...

  6. easyui combobox 拼音检索快捷选择输入

    easyui combobox 拼音检索快捷选择输入 效果如图   $.ajax({ url: UserActionUrl + '?action=listuserworktype', dataType ...

  7. webservice的测试案例

    1.服务器端 服务器接口Test_service.java package com.xiaostudy; /** * @desc 服务器接口 * @author xiaostudy * */ publ ...

  8. python+opencv链接摄像头

    import cv2 import numpy as numpy cap=cv2.VideoCapture(0) #设置显示分辨率和FPS ,不设置的话会非常卡 cap.set(cv2.CAP_PRO ...

  9. SEA 教程

    Sina App Engine(SAE)教程(11)- Yaf使用 Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用 Sina App Engine(SAE)入门教 ...

  10. 使用ASP.NET 的缓存机制的示例

    if (HttpContext.Current.Cache["code_" + CodeType] == null) { SysCodeService codeService = ...