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 ...
随机推荐
- 寻路算法A*, JPS(跳点搜索)的一些杂谈
A*是一个比较经典的启发式寻路算法.是基于dijkstra算法,但是加入了启发函数,使路径搜索效率更高.实现起来很简单.不过要做到通用性高,比如支持各种不同类型的地图,甚至不仅仅是地图,而是个图结构如 ...
- cogs 1487. 麻球繁衍
★ 输入文件:tribbles.in 输出文件:tribbles.out 评测插件 时间限制:3 s 内存限制:256 MB [题目描述] 万有引力定律: “使物体相互靠近的力的大小与 ...
- [Deep Learning] 神经网络基础【转】
本文转载自:http://www.cnblogs.com/maybe2030/p/5597716.html 阅读目录 1. 神经元模型 2. 感知机和神经网络 3. 误差逆传播算法 4. 常见的神经网 ...
- minSdk(API 21) > deviceSdk(API 17)解决
运行一个开源的项目出现“minSdk(API 21) > deviceSdk(API 17)”的提示,因为我用的是手机是sdk(API17)的,而项目要求是最低版本是minSdk(API 21) ...
- PHP设计模式(四):生成器模式
- Elasticsearch Server,2nd Edition pdf 翻译 中文
很偶然的机会,就需要接触到搜索,入门就是google trend已然超过solr的ES.在入门的时候找书的时候发现没有中文版的.于是自己开始翻译Elasticsearch Server,2nd Edi ...
- 日期插件My97DatePicker
因为项目中需要选中日期,所以就找到了My97DatePicker这个插件,用法非常的简单,但是因为各个公司的要求不同,我们公司使用js拼代码,然后渲染到页面上的,所以遇到了一点问题… 1.My97Da ...
- thinkphp 模板中得到controller name,得到当前文件路径
<li><a href="/Admin/account" <eq name="Think.CONTROLLER_NAME" value= ...
- spring mvc: log4j插件 log日志的输出
准备: log插件:log4j <!-- log日志插件 --> <!-- https://mvnrepository.com/artifact/log4j/log4j --> ...
- linux禁止ping
1.临时禁止PING操作的命令为:#echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all 2.永久禁止PING配置方法 /etc/sysctl.conf ...