Django 模型类—查询

1.修改mysql的日志文件:

让其产生mysql.log,即是mysql的日志文件,里面记录的对MySQL数据库的操作记录。

(1)使用下面的命令打开mysql 的配置文件,去除68,69行的注释,然后保存。
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

打开之后输入68,然后按G

(2)重启mysql服务,就会产生mysql日志文件。
sudo service mysql restart

(3)打开MySQL的日志文件。
/var/log/mysql/mysql.log是MySQL的日志文件所在的位置。

使用下面的命令可以实时查看mysql的日志文件:
sudo tail -f /var/log/mysql/mysql.log

2.查询函数

通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询。

(1)进入虚拟交互环境

(2)查询函数


(a)get示例:BookInfo.objects.get(id=1)

(b)all示例:BookInfo.objects.all()

(c)filter示例:
条件格式:模型类属性名__条件名=值 (双下划线)

1)判等 条件名:exact
BookInfo.objects.get(id__exact=1) #标准写法
BookInfo.objects.get(id=1) #简写

2)模糊查询 条件名:contains
BookInfo.objects.filter(btitle__contains=‘传‘) #带传字查询

3)endswith结尾,starswitch开头
BookInfo.objects.filter(btitle__endswith=‘部‘)

4)空查询 isnull
BookInfo.objects.filter(btitle__isnull=False) #查询不为空的书名

5)范围查询 in

数据库命令:select * from booktext_bookinfo where id in (1,2,3);

BookInfo.objects.filter(id__in=[1,2,3])

6)比较查询
gt(greate than) lt(less than) gte(大于等于) lte(小于等于)

select * from booktest_bookinfo where id>3;

BookInfo.objects.filter(id__gt=3)

7)日期查询

BookInfo.objects.filter(bpub_date__year=1980) #1980年发表的书

from datetime import date
BookInfo.objects.filter(bpub_date__gt=date(1999,2,5)) #查询1999,2,5号后发表的书

(d)exclude方法示例:
BookInfo.objects.exclude(id=3)

(e)order_by方法示例:

BookInfo.objects.all().order_by(‘id‘) #从小到大
BookInfo.objects.order_by(‘id‘)

BookInfo.objects.all().order_by(‘-id‘) #从大到小
BookInfo.objects.order_by(‘-id‘)

BookInfo.objects.filter(id__gt=3).order_by(‘bread‘) #从大到小

3.F对象

作用:用于类属性之间的比较
使用之前需要先导入:
from django.db.models import F

BookInfo.objects.filter(bread__gt=F(‘bcomment‘)) #阅读量大于评论量

BookInfo.objects.filter(bread__gt=F(‘bcomment‘) * 2) #阅读量大于评论量

4.Q对象

作用:用于查询时条件之间的逻辑关系。not and or,可以对Q对象进行& | ~

BookInfo.objects.filter(idgt=3,breadgt=3)
BookInfo.objects.filter(Q(idgt=3) & Q(breadgt=3)) #与关系

BookInfo.objects.filter(Q(idgt=3) | Q(breadgt=3)) #或关系

BookInfo.objects.filter( ~Q(bread__gt=3)) #非关系

5.聚合函数

作用:对查询结果进行聚合
sum count avg max min

(1)aggregate:调用这个函数来使用聚合。返回值是一个字典

使用前需先导入聚合类:
from django.db.models import Sum,Count,Max,Min,Avg

BookInfo.objects.all().aggregate(Count(‘id‘)) #查询所有图书的数目

BookInfo.objects.aggregate(Sum(‘bread‘)) #查询所有图书阅读量的总和

(2)count 函数 返回值是一个数字

作用:统计满足条件数据的数目

例:
BookInfo.objects.all().count()
BookInfo.objects.count() #统计所有图书的数目

BookInfo.objects.filter(id__gt=3).count() #id大于3的所有图书的数目

6.总结

原文地址:http://blog.51cto.com/13742773/2345196

时间: 2024-08-05 02:36:39

Django 模型类—查询的相关文章

7.Django模型类的定义和管理

Django的模型类是给ORM层服务的 1.每个数据模型都是django.db.models.Model的子类. 2.它的父类Model包含了所有必要的和数据库交互的方法,并提供了定义数据库字段的语法. 3.每个模型相当于一个数据库表(这条规则的例外情况是多对多关系,多对多关系的时候会多生成一张关系表), 4.每个属性是表中的一个字段.属性名就是字段名,类型就是字段类型 5.模型之间的三种关系 一对一(OneToOneField) 一对多(ForeignKey) 多对多(ManyToMangFi

Django模型类之models字段类型和参数以及元数据meta

models之字段类型和参数 示例: # class Test(models.Model): # courses_test # """测试学习用""" # # Auto = models.AutoField() # 自增长字段 # # BigAuto = models.BigAutoField() # # # 二进制数据 # Binary = models.BinaryField() # # # 布尔型 # Boolean = models.Bo

django模型系统二

常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. QuerySet等同于select语句,过滤器是一个限制子句,比如where,limit. all() 获取所有 Student.objects.all() #返回的是queryset 获取第一条 Student.objects.first() #返回的是对象 获取最后一条 Student.obj

django模型系统(二)

django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围(filter). QuerySet等同与select语句,过滤器等同于一个限制字句,比如where.limit 使用.query可查看对应的SQL语句 all()获取所有 name.objects.all()queryset 获取第一条 name.objects.first()返回的是对象 获取最后

python django模型内部类meta详解

Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应数据库表的.一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段.比如下面的代码中Human是一个抽象类,Employee是一个继承了Human的子类,那么在运行syncdb命令时,不会生成Human表,但是会生成一个Employee表,它包含了Human中继承来的字段,以后如果再添加一个Cu

Django模型之Meta选项详解

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据库表的.一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段. Options.abstract如果abstract = True 这个model就是一个抽象类 app_label 这个选型只在一种情况下使用,就是你的模型不在默认的应用程序包下的models.py文件中,这时候需要指

Django模型层Meta内部类详解

Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应数据库表的.一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段.比如下面的代码中Human是一个抽象类,Employee是一个继承了Human的子类,那么在运行syncdb命令时,不会生成Human表,但是会生成一个Employee表,它包含了Human中继承来的字段,以后如果再添加一个Cu

Django模型之Meta详解

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据库表的.一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段. Options.abstract如果abstract = True 这个model就是一个抽象类 app_label 这个选型只在一种情况下使用,就是你的模型不在默认的应用程序包下的models.py文件中,这时候需要指

模型类序列化器

模型类序列化器 DRF提供了模型类序列化器: ModelSerializer 作用: 简化对应django模型类的序列化器的定义 ModelSerializer与常规的Serializer相同,但提供了: 基于模型类自动生成一系列字段 基于模型类自动为 Serializer 生成 validators,比如字段唯一的校验器 包含默认的 create() 和 update() 的实现 1. 定义 比如我们创建一个 DepartmentSerializer2 class DepartmentSeri