Django(19)-ORM条件查询

Django(1)-简介

Django(2)-创建项目及默认项目目录结构介绍

Django(3)-配置文件详解

Django(4)-URL和视图

Django(5)-路由配置实例

Django(6)-请求及响应

Django(7)-Get请求和Post请求

Django(8)-设计模式

Django(9)-模板层简介与入门实例

Django(10)-模板层的变量和标签

Django(11)-模板层的过滤器和继承

Django(12)-url反向解析

Django(13)-静态文件

Django(14)-应用及分布式路由

Django(15)-模型层及ORM介绍

Django(16)-ORM基础字段及选项

Django(17)-ORM创建数据

Django(18)-ORM常用的查询函数详解及实例演示

Django(19)-ORM条件查询

Django(20)-ORM更新操作及实例演示

Django(21)-ORM删除操作及实例演示

Django(22)-ORM中F对象和Q对象

Django(23)-ORM聚合查询和原生数据库操作

Django(24)-admin后台管理设置步骤以及常见样式详解

Django实战技巧(1)-开发测试生产环境配置切换处理技巧

Django实战技巧(2)-git代码仓分支管理技巧

Django实战技巧(3)-项目配置

1、条件查询方法

  • filter()
    • 语法;MyMode.objects.filter(属性1=值1,属性2=值2)
    • 作用:返回包含此条件的全部的数据集
    • 返回值:QuerySet容器对象,内部存放MyModel实例
    • 说明:当多个属性在一起时为‘与’的关系
      如:
>>> from app1.models import Person
>>> persons=Person.objects.filter(name="zhangsan")
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> for p in persons:
...     print(p.name,p.age,p.sex)
...
zhangsan 30 man
>>> persons=Person.objects.filter(name="zhangsan",sex="man")
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> for p in persons:
...     print(p.name,p.age,p.sex)
...
zhangsan 30 man
>>>
  • exclude(条件)
    • 语法:MyModel.objects.exclude(条件)
    • 作用:返回不包含此条件的全部的数据集)
      如:
>>> from app1.models import Person
>>> persons=Person.objects.exclude(age=20)
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>, <Person: 姓名:lisi,年龄:25,性别:man>]>
>>> for p in persons:
...     print(p.name,p.age,p.sex)
...
zhangsan 30 man
lisi 25 man
>>>

  • get(条件)
    • 语法:MyModel.objects.get(条件)
    • 作用:返回满足条件的唯一一条数据
    • 说明:该方法只能返回一条数据,如果查询多条数据或者没查询到数据则抛出异常
      如:
>>> from app1.models import Person
>>> person=Person.objects.get(name="zhangsan",age=30)
>>> person
<Person: 姓名:zhangsan,年龄:30,性别:man>
>>> print(p.name,p.age,p.sex)
lisi 25 man
>>> person=Person.objects.get(sex="man")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\Administrator\.virtualenvs\django-5F60hEIM\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Administrator\.virtualenvs\django-5F60hEIM\lib\site-packages\django\db\models\query.py", line 439, in get
    raise self.model.MultipleObjectsReturned(
app1.models.Person.MultipleObjectsReturned: get() returned more than one Person -- it returned 2!
>>> person=Person.objects.get(name="zhangsan",sex="woman")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\Administrator\.virtualenvs\django-5F60hEIM\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Administrator\.virtualenvs\django-5F60hEIM\lib\site-packages\django\db\models\query.py", line 435, in get
    raise self.model.DoesNotExist(
app1.models.Person.DoesNotExist: Person matching query does not exist.
>>>

2、查询谓词

  • 定义:做更灵活的条件查询时需要使用查询谓词
  • 说明:每个查询谓词是一个独立的查询功能
  • 常见的查询谓词有:
    • __exact:等值匹配
    • __contains:包含指定的值
    • __startswith:以xxx开始
    • __endswith:以xxx结尾
    • __gt:大于指定值
    • __gte:大于等于
    • __lt:小于
    • __lte:小于等于
    • __in:查找数据是否在指定的方位内
    • __range:查找数据是否在指定的区间范围内

如:

>>> from app1.models import Person
>>> persons=Person.objects.filter(name__exact="zhangsan")
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> for p in persons:
...     print(p.name,p.age,p.sex)
...
zhangsan 30 man
>>> persons=Person.objects.filter(name__contains="zhang")
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> persons=Person.objects.filter(name__startswith="zhang")
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> persons=Person.objects.filter(name__endswith="san")
>>>
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> persons=Person.objects.filter(age__gt=25)
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> persons=Person.objects.filter(age__gte=25)
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>, <Person: 姓名:lisi,年龄:25,性别:man>]>
>>> persons=Person.objects.filter(age__lt=30)
>>> persons
<QuerySet [<Person: 姓名:lisi,年龄:25,性别:man>]>
>>> persons=Person.objects.filter(age__lte=30)
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>, <Person: 姓名:lisi,年龄:25,性别:man>]>
>>> persons=Person.objects.filter(name__in=["zhangsan","wangwu"])
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>]>
>>> persons=Person.objects.filter(age__range=(25,30))
>>> persons
<QuerySet [<Person: 姓名:zhangsan,年龄:30,性别:man>, <Person: 姓名:lisi,年龄:25,性别:man>]>
>>> persons=Person.objects.filter(age__range=(25,29))
>>> persons
<QuerySet [<Person: 姓名:lisi,年龄:25,性别:man>]>
>>>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值