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. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析

    关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 —— IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...

  2. Android Studio开发学习 - 1. 添加Activity

    1. 项目上点右键,New -> Activity -> Blank Activity 这将生成Activity的 Layout.Class .和相关的配置信息(在AndroidManif ...

  3. Tensorflow平台快速搭建:Windows 7+TensorFlow 0.12.0

    Tensorflow平台快速搭建:Windows 7+TensorFlow 0.12.0 1.TensorFlow 0.12.0下载 2016年11月29日,距离TensorFlow 宣布开源刚刚过去 ...

  4. ELK出现unassigned_shards查看及删除

    问题 用3台服务器搭建了ELK系统,有一天出现有几个索引一直无法同步,重启了elasticsearch也不行 如下图:elk-cluster一直处于red状态 解决方法 一,查看elasticsear ...

  5. was控制台英文改成中文

    在安装was的时候没有选中简体中文包,所以导致安装后的was控制台显示中文,但是没关系,我们还是通过界面配置来修改,使得控制台从英文变为中文 1.vnc远程到服务器2./opt/IBM/Install ...

  6. bzoj1087: [SCOI2005]互不侵犯King (codevs2451) 状压dp

    唔...今天学了状压就练练手... 点我看题 这题的话,我感觉算是入门题了QAQ... 然而我还是想了好久... 大致自己推出了方程,但是一直挂,调了很久选择了题解 坚持不懈的努力的调代码. 然后发现 ...

  7. Mybatis动态SQL——if,where,trim,choose,set.foreach的用法

    知识点:主要介绍mybatis中,动态sql中的if,where,trim,set,foreach的用法 自学谷粒学院mybatis学习视频,参考mybatis官方文档 java包:log4j.jar ...

  8. JDK 中的监控与故障处理工具-02 (jps)

    jps : JVM Process Status Tool jps 命令可以列出正在运行的虚拟机进程, 并显示虚拟机执行的 main class 的名称(main函数所在的类),以及这些进程的本地虚拟 ...

  9. .net 获取当前电脑账户

    string domainAndName = User.Identity.Name; ] { '\\' }, StringSplitOptions.RemoveEmptyEntries); strin ...

  10. 【Network Architecture】Densely Connected Convolutional Networks 论文解析

    目录 0. Paper link 1. Overview 2. DenseNet Architecture 2.1 Analogy to ResNet 2.2 Composite function 2 ...