Django中对数据库的查询修改等操作笔记

1.get():返回表中满足条件的一条且只能有一条数据。

如果查到多条数据,则抛异常:MultipleObjectsReturned

查询不到数据,则抛异常:DoesNotExist

例:查询图书id为3的图书信息。

BookInfo.objects.get(id=3)

2.all():返回模型类对应表格中的所有数据。QuerySet类型,查询集

例:查询图书所有信息。

BookInfo.objects.all()

3.filter():参数写查询条件,返回满足条件的数据。QuerySet

条件格式:

模型类属性名__条件名=值   或者 模型类属性名=名(没有外键)

例:查询图书id为3的图书的信息:

BookInfo.objects.filter(id=3)

例:查询书名为“天龙八部”的所有英雄。

HeroInfo.objects.filter(hbook__btitle='天龙八部')

4. 判等 exact

:查询编号为1的图书。

BookInfo.objects.get(id=1)

BookInfo.objects.get(id__exact=1)    --不常用

5. 模糊查询

例:查询书名包含'传'的图书。contains

BookInfo.objects.filter(btitle__contains='传')

例:查询书名以'部'结尾的图书 endswith 开头:startswith

BookInfo.objects.filter(btitle__endswith='部')

6. 空查询 isnull select * from booktest_bookinfo where title is not null;

例:查询书名不为空的图书。isnull

BookInfo.objects.filter(btitle__isnull=False)

7. 范围查询 in select * from booktest_bookinfo where id in (1,3,5)

例:查询编号为1或3或5的图书。

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

8. 比较查询

例:查询编号大于3的图书。gt(greate than) lt(less than)小于 gte(equal) lte

BookInfo.objects.filter(id__gt = 3)

9. 日期查询

例:查询1980年发表的图书。

BookInfo.objects.filter(bpub_date__year=1980)

例:查询1980年1月1日后发表的图书。

from datetime import date

BookInfo.objects.filter(bpub_date__gt = date(1980,1,1))

10.exclude:返回不满足条件的数据。QuerySet

例:查询id不为3的图书信息。

BookInfo.objects.exclude(id=3)

11.F对象

作用:用于类属性之间的比较条件。

使用之前需要先导入

from django.db.models import F

例:查询图书阅读量大于评论量图书信息。

BookInfo.objects.filter(bread__gt = F('bcomment'))

例:查询图书阅读量大于2倍评论量图书信息。

BookInfo.objects.filter(bread__gt = F('bcomment')*2)

12.Q对象

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

使用之前需要先导入:

from django.db.models import Q

例:查询id大于3且阅读量大于30的图书的信息。

BookInfo.objects.filter(id__gt=3, bread__gt=30)

BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30))

例:查询id大于3或者阅读量大于30的图书的信息。

BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30))

例:查询id不等于3图书的信息。

BookInfo.objects.filter(~Q(id=3))

13.order_by QuerySet

作用:进行查询结果进行排序。

例:查询所有图书的信息,按照id从小到大进行排序。

BookInfo.objects.all().order_by('id')

BookInfo.objects.order_by('id')

例:查询所有图书的信息,按照id从大到小进行排序。

BookInfo.objects.all().order_by('-id')

例:把id大于3的图书信息按阅读量从大到小排序显示;

BookInfo.objects.filter(id__gt=3).order_by('-bread')

14.聚合函数

作用:对查询结果进行聚合操作。

sum count max min avg

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

使用前需先导入聚合类

from django.db.models import Sum,Count,Max,Min,Avg

例:查询所有图书的数目。Count

BookInfo.objects.aggregate(Count('id'))

返回值类型:

{'id__count': 5}

例:查询所有图书阅读量的总和。

BookInfo.objects.aggregate(Sum('bread'))

{'bread__sum': 126}

15.count函数 返回值是一个数字

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

例:统计所有图书的数目。

BookInfo.objects.count()

例:统计id大于3的所有图书的数目。

BookInfo.objects.filter(id__gt=3).count()

16.查询相关函数返回值总结:

get:返回一个对象

all:QuerySet 返回所有数据

filter:QuerySet 返回满足条件的数据

exclude:QuerySet 返回不满条件的数据

order_by:QuerySet 对查询结果进行排序

aggregate:字典 进行聚合操作

count:数字 返回查询集中数据的数目

get,filter,exclude参数中可以写查询条件。

17.查询集

all, filter, exclude, order_by调用这些函数会产生一个查询集,可以在查询集上继续调用这些函数。

查询集特性:

  1. 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询。

  2. 缓存:当使用的是同一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果。

限制查询集:

可以对一个查询集进行取下标或者切片操作来限制查询集的结果。

b[0]就是取出查询集的第一条数据,b[0:1].get()也可取出查询集的第一条数据。如果b[0]不存在,会抛出IndexError异常,如果b[0:1].get()不存在,会抛出DoesNotExist异常。多条时抛MultiObjectsReturned

对一个查询集进行切片操作会产生一个新的查询集下标不允许为负数

exists:判断一个查询集中是否有数据。True False

18.模型类关系

  1. 一对多关系

例:图书类-英雄类

models.ForeignKey() 定义在多的类中。

  1. 多对多关系

例:新闻类-新闻类型类 体育新闻 国际

models.ManyToManyField() 定义在哪个类中都可以。

  1. 一对一关系

例:员工基本信息类-员工详细信息类. 员工工号

models.OneToOneField定义在哪个类中都可以。

19.关联查询(一对多

在一对多关系中,一对应的类我们把它叫做一类,多对应的那个类我们把它叫做多类,我们把多类中定义的建立关联的类属性叫做关联属性

例:查询图书id为1的所有英雄的信息。

book = BookInfo.objects.get(id=1)

book.heroinfo_set.all()

通过模型类查询:

HeroInfo.objects.filter(hbook_id=1)

例:查询id为1的英雄所属图书信息。

hero =HeroInfo.objects.get(id=1)

hero.hbook

通过模型类查询:

BookInfo.objects.filter(heroinfo__id=1)

 

格式:

Django中对数据库的查询修改等操作笔记_第1张图片

由一类的对象查询多类的时候:

一类的对象.多类名小写_set.all() #查询所用数据

由多类的对象查询一类的时候:

多类的对象.关联属性 #查询多类的对象对应的一类的对象

由多类的对象查询一类对象的id时候:

多类的对象. 关联属性_id

通过模型类实现关联查询:

例:查询图书信息,要求图书中英雄的描述包含'八'。

BookInfo.objects.filter(heroinfo__hcomment__contains='八')

例:查询图书信息,要求图书中的英雄的id大于3.

BookInfo.objects.filter(heroinfo__id__gt=3)

例:查询书名为“天龙八部”的所有英雄。

HeroInfo.objects.filter(hbook__btitle='天龙八部')

通过多类的条件查询一类的数据:

一类名.objects.filter(多类名小写__多类属性名__条件名)

通过一类的条件查询多类的数据:

多类名.objects.filter(关联属性__一类属性名__条件名)

20.插入、更新和删除

调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新

调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除

21.自关联

Django中对数据库的查询修改等操作笔记_第2张图片

自关联是一种特殊的一对多的关系。

案例:显示广州市的上级地区和下级地区。

地区表:id, title, parenteid;

mysql终端中批量执行sql语句:source areas.sql;

22.管理器

BookInfo.objects.all()->objects是一个什么东西呢?

答:objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询。

objects是models.Manger类的一个对象。自定义管理器之后Django不再帮我们生成默认的objects管理器。

 

  1. 自定义一个管理器类,这个类继承models.Manger类。

  2. 再在具体的模型类里定义一个自定义管理器类的对象。

 

自定义管理器类的应用场景:

  1. 改变查询的结果集。

比如调用BookInfo.books.all()返回的是没有删除的图书的数据。

  1. 添加额外的方法。

管理器类中定义一个方法帮我们创建对应的模型类对象。

使用self.model()就可以创建一个跟自定义管理器对应的模型类对象。

23.元选项

Django默认生成的表名:

应用名小写_模型类名小写。

元选项:

需要在模型类中定义一个元类Meta,在里面定义一个类属性db_table就可以指定表名。

你可能感兴趣的:(web框架,数据库操作笔记,python,django,mysql)