Django:查询基础语法

一、数据准备

1、在models.py中定义一个新闻和新闻类型的模型类

class NewsInfo(models.Model):
 """新闻表"""
 title = models.CharField(max_length=100, help_text='新闻标题', verbose_name='新闻标题', blank=True, default='')
 content = models.TextField(help_text='内容', verbose_name='内容', blank=True, default='')
 b_date = models.DateField(help_text='日期', verbose_name='日期')
 read = models.IntegerField(help_text='阅读量', verbose_name='阅读量', blank=True, default=0)
 good = models.IntegerField(help_text='点赞数量', verbose_name='点赞数量', blank=True, default=0)

class TypeInfo(models.Model):
 """新闻类型"""
 type = models.CharField(max_length=20, help_text='新闻类型', verbose_name='新闻类型')

2、再次生成迁移

python manage.py makemigrations

3、执行迁移

python manage.py migrate

4、登录Django后台,添加一些练习数据

二、查询函数

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

函数名功能返回值说明
get 返回表中满足条件的一条且只能有一条数据。 返回值是一个模型类对象。 参数中写查询条件。1) 如果查到多条数据,则抛异常MultipleObjectsReturned。2)查询不到数据,则抛异常:DoesNotExist。
all 返回模型类对应表格中的所有数据。 返回值是QuerySet类型 查询集
filter 返回满足条件的数据。 返回值是QuerySet类型 参数写查询条件。
exclude 返回不满足条件的数据。 返回值是QuerySet类型 参数写查询条件。
order_by 对查询结果进行排序。 返回值是QuerySet类型 参数中写根据哪些字段进行排序。

Django的交互调试环境

启动项目,进入交互环境

python manage.py shell

导入models模块

from news.models import *

查询单条数据:get

# 查询id为3的新闻信息
NewsInfo.objects.get(id=3)

所有数据:all

# 查询所有新闻数据
NewsInfo.objects.all()

过滤:filter

# 查询新闻阅读量为9999的新闻数据:
NewsInfo.objects.filter(read=9999)

不等于:exclude

#查询所有id不等于1的新闻数据
NewsInfo.objects.exclude(id=1)

排序:oroder_by

#查询所有新闻数据并且按id进行排序(从小到大)
NewsInfo.objects.all().order_by('id')

#查询所有新闻数据并且按id进行排序(从大到小)
NewsInfo.objects.all().order_by('-id')

三、查询集

all, filter, exclude, order_by调用这些函数会产生一个查询集(QuerySet),查询集可以继续调用上面的所有函数。可以通过exists判断一个查询集中是否有数据

查询集特性

  • 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询
  • 缓存:当使用的是同一个查询集时,第一次使用的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果
  • 索引取值
    TypeInfo.objects.all()[0]
  • 切片操作
    TypeInfo.objects.all()[0:3]

     

四、模糊条件查询

#条件语法格式
模型类.objects.filter(模型类属性名__条件名=值)

包含:contains

# 查询名称里包含'娱乐’的新闻类别。
TypeInfo.objects.filter(new_type__contains='娱乐')

开头:startswith

# 查询以'国'开头的新闻类别 
TypeInfo.objects.filter(new_type__startswith='')

结尾:endswith

# 查询以'资讯'结尾的新闻类别
TypeInfo.objects.filter(new_type__endswith='资讯')

范围查询:in

# 查询id为1或3或5的新闻类别
TypeInfo.objects.filter(id__in=[1,3,5])

五、比较查询

大于:gt

# Demo:查询id大于3的数据
TypeInfo.objects.filter(id__gt=3)

小于:lt

# Demo:查询id小于3的数据
TypeInfo.objects.filter(id__lt=3)

大于等于:gte

#Demo:查询id大于等于5的数据
TypeInfo.objects.filter(id__gte=5)

小于等于:lte

# Demo:查询id小于等于3的数据
TypeInfo.objects.filter(id__lte=3)   

六、空查询: isnull

isnull值为True:表示查询为空的数据,值为False查询不为空的数据

Demo:查询标题不为空的新闻.
NewsInfo.objects.filter(title__isnull=False)

 

posted @ 2024-08-19 23:13  未来可期_Durant  阅读(2)  评论(0编辑  收藏  举报