美文网首页
pycharm数据库模型查询

pycharm数据库模型查询

作者: a上癮 | 来源:发表于2018-04-15 20:42 被阅读0次

简介

查询集表示从数据库中获取的对象集合。查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果。从Sql的角度,查询集和select语句等价,过滤器像where和limit子句

接下来主要介绍:查询集、字段查询(比较运算符,F对象,Q对象)

查询集

在管理器上调用过滤器方法会返回查询集。查询集经过过滤器筛选后返回新的查询集,因此可以写成链式过滤。惰性执行:创建查询集不会带来任何数据库的访问,直到调用数据时,才会访问数据库。何时对查询集求值:迭代,序列化,与if合用

返回查询集的方法,被称为过滤器:

all()

filter()

exclude()

order_by()

values():一个对象构成一个字典,然后构成一个列表返回


返回单个值的方法:

get():返回单个满足条件的对象

count():返回当前查询的总条数

first():返回第一个对象

last():返回最后一个对象

exists():判断查询集中是否有数据,如果有测返回True

限制查询集

查询集返回列表,可以使用下标的方式进行限制,等同于sql中的limit和offset子句。注意:不支持负数索引。使用下标后返回一个新的查询集,不会立即执行查询。如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()引发DoesNotExist异常

查询集的缓存

每个查询集都包含一个缓存来最小化对数据库的访问

在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存的结果

情况一:这构成了两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载

print([e.title for e in Entry.objects.all()])   |    print([e.title for e in Entry.objects.all()])

情况二:两次循环使用同一个查询集,第二次使用缓存中的数据

querylist=Entry.objects.all()

print([e.title for e in querylist])        |       print([e.title for e in querylist])

何时查询集不会被缓存:当只对查询集的部分进行求值时会检查缓存,但是如果这部分不在缓存中,那么接下来查询返回的记录将不会被缓存,这意味着使用索引来限制查询集将不会填充缓存,如果这部分数据已经被缓存,则直接使用缓存中的数据

字段查询

实现where子名,作为方法filter()、exclude()、get()的参数

语法:属性名称__比较运算符=值。表示两个下划线,左侧是属性名称,右侧是比较类型。对于外键,使用“属性名_id”表示外键的原始值。转义:like语句中使用了%与,匹配数据中的%与,在过滤器中直接写,例如:filter(title__contains="%")=>where title like '%\%%',表示查找标题中包含%的

比较运算符

exclude:返回不满足条件的数据 --->filter取反

BookInfo.book.exclude(id=3).count()查询所有id不为3的图书有多少本

exact:表示判等,大小写敏感;如果没有写“比较运算符”,表示判等

filter(id__exact=1) 其实exact也可以省略filter(id=1)

contains:是否包含,大小写敏感

filter(name__contains='传') 查询名字里包含传的

filter(name__startswith='传')查询以传开头的

filter(name__endswith='王').values() 查询以王为结尾的

isnull空值查询

filter(btitle__isnull=False)查询不为空的值

in:范围查询

filter(id_in=[1,2,3,4,5])查询编号为1或2或3或4或5

gt、gte、lt、lte:大于、大于等于、小于、小于等于

filter(id__gt=3) 查询id大于3

year、month、day、week_day、hour、minute、second:对日期间类型的属性进行运算

filter(bpub_date__year=1980)       filter(bpub_date__gt=date(1980, 12, 31))

查询的快捷方式:pk,pk表示primary key,默认的主键是id

filter(pk__lt=6)

聚合函数

使用aggregate()函数返回聚合函数的值。函数:Avg,Count,Max,Min,Sum

from django.db.models import Max

BookInfo.book.aggregate(Max('age')) 查询年龄最大的

F对象

BookInfo.book.filter(bread__gt = F('bcomment'))查询图书阅读量大于评论量的图书信息

BookInfo.book.filter(bread__gt = F('bcomment')*2)查询图书阅读量大于2倍的评论量的图书信息

Q对象

BookInfo.book.filter(Q(id__gt=3)|Q(bread__gt=30))查询id大于3或者阅读量大于30的图书信息

BookInfo.book.filter(~Q(id=3))查询id不等于3图书的信息

order_by

BookInfo.book.all().order_by('id')查询所有图书的信息,按照id从小到大进行排序。

BookInfo.book.all().order_by('-id').values()查询所有图书的信息,按照id从大到小进行排序。

相关文章

  • pycharm数据库模型查询

    简介 查询集表示从数据库中获取的对象集合。查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果...

  • Django ORM-2MODEL设置

    数据库模型 创建模型类 创建类属性并重置表名 创建关联数据的模型类 数据迁移 使用Pycharm1、点击image...

  • 八 Django数据库基本查询操作

    数据库基本操作(查询) 一、查询对象 从数据库里检索对象,可以通过模型的Manage来建立QuerySet,一个Q...

  • 9、Django_ORM_数据的创建以及增删改查

    一、查询集QuerySet 什么是查询集?查询集:从数据库查询得到的模型对象集合QuerySet,是一个列表 什么...

  • HelloDjango - Python+Django+xadm

    第三篇我们来学习模型的操作,即数据库操作。 数据库操作 查询 查询所有数据urls => url(r'^query...

  • pycharm-配置数据库(SQL Dialect is Not

    没有配置(或未成功)配置的现象 使用pycharm进行数据库查询时SQL语句经常提示SQL Dialect is ...

  • 管理器 Manager

    管理器是 Django 的模型进行数据库的查询操作的接口 ,用于与数据库进行交互,Django 应用的每个模型都拥...

  • Laravel数据库操作之-Eloquent ORM

    数据库操作之-Eloquent ORM Eloquent ORM简介、模型的建立及查询数据 Eloquent OR...

  • Django基础(三):models-database

    [TOC] 模型与数据库:一一对应 创建、查询操作 注意Person.objects.xx()的返回值类型! 查询...

  • Django教程

    创建项目 对于Mysql数据库:需要安装pymysql这个第三方库 数据库配置 模型 5.2 数据查询 要从数据库...

网友评论

      本文标题:pycharm数据库模型查询

      本文链接:https://www.haomeiwen.com/subject/oawqkftx.html