前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django的ORM操作-查询数据

Django的ORM操作-查询数据

作者头像
Yuou
发布2022-09-26 15:31:24
8100
发布2022-09-26 15:31:24
举报
文章被收录于专栏:乱七八糟技术日常
  • 数据库的查询需要使用管理器对象进行

  • 通过mymodel.objects管理器方法调用查询对象

方法

说明

all()

查询全部记录,返回QuerySet查询对象

get()

查询符合条件的单一记录

filter()

查询符合条件的多条记录

exclude()

查询符合条件外的全部记录

all()方法


  • 使用方法:Asset.objects.all()
代码语言:javascript
复制
from monitor.models import Asset
querys =Asset.objects.all()
for i in querys:
    print("创建日期",i.create_date,"操作系统",i.system)
# 打印结果
创建日期 2021-06-16 13:52:14+00:00 操作系统 Centos7
  • 作用:查询Mymodel中所有的数据等同与数据库中的select * from table,返回QuerySet容器对象,内部存放MyModel实例

可以在模型类中定义__str__方法,字典统一queryset中输出的格式

代码语言:javascript
复制
    def __str__(self):
        return "创建日期:%s" "物理机信息:%s"%(self.create_date,self.physics_host)

values()方法

  • 用法:Asset.objects.values()
  • 作用:查询部分列的数据并返回 等同于 select 列1,列2 from table
  • 依旧返回QuerySet只不过里面放的是dict字典
代码语言:javascript
复制
>>> a = Asset.objects.values("create_date")
>>> a
<QuerySet [{'create_date': datetime.datetime(2021, 6, 16, 13, 52, 14, tzinfo=<UTC>)}]>

注意这个时候取回来的值是字典的形式,需要用字典的取值方法

values_list方法


  • 用法:Asset.objects.values_list()
  • 作用:以元组的方式查询结果
  • 返回值:QuerySet容器对象,内部存放的是元组
    • 会将查询出来的数据封装到元组中,在封装到查询集合QuerySet中
代码语言:javascript
复制
>>> a = Asset.objects.values_list("create_date")
>>> a
<QuerySet [(datetime.datetime(2021, 6, 16, 13, 52, 14, tzinfo=<UTC>),)]>

注意这个时候取回来的值是元组的形式,需要用元组的取值方法 取值方法: print(元组名[索引])

order_by方法


  • 用法:Asset.objects.order_by('-列','列')
  • 作用:与all()方法不同,他会用SQL语句的ORDER_BY对查询结果根据某个字段选择性的进行排序,默认是升序格式,降序排列需要在列前增加-表示
代码语言:javascript
复制
>>> a = Asset.objects.order_by("create_date")
>>> b = Asset.objects.values("title").order_by('-price')
>>> print(a.query) # 可以使用这种方式查看发送给MySQL的查询语句

filter()


  • 用法:Asset.objects.filter(属性1=值1,属性2=值2),当多个属性在一起为关系
  • 作用:返回包含此条件的全部数据集
  • 返回值:QuerySet容器对象,内部存放模块实例
代码语言:javascript
复制
# 查询数据库中 create_user为admin的
from monitor.models import Asset
info = Asset.objects.filter(create_user="admin")
for i in info:
    print("查询结果",i.create_date)
代码语言:javascript
复制
# 查询数据库中 create_user为admin的并且系统为Linux的
from monitor.models import Asset
info = Asset.objects.filter(create_user="admin",system="Linux")
for i in info:
    print("查询结果",i.create_date)

exclude()


  • 语法:Asset.objects.exclude(条件)
  • 作用:返回不包含此条件的数据集
代码语言:javascript
复制
# 查询数据库中 create_user为admin的并且系统为Linux以外的服务器信息
from monitor.models import Asset
info = Asset.objects.exclude(create_user="admin",system="Linux")
for i in info:
    print("查询结果",i.create_date)

get()


  • 语法Asset.objects.get(条件)
  • 作用:返回满足条件的唯一一条数据,如果查询结果多于1条则会抛出异常Model.MultipleObjectsReturned异常,如果没有查询出数据则会抛出Model.DoesNotExist异常
代码语言:javascript
复制
from monitor.models import Asset
info = Asset.objects.get(create_user="admin",system="Linux")
for i in info:
    print("查询结果",i.create_date)

查询谓词

  • 定义:做更灵活的条件查询时候需要使用查询谓词
  • 每一个查询谓词是一个独立的查询功能

__exact

  • 等值匹配

代码语言:javascript
复制
info = Asset.objects.filter(id__exact=1) # 等同于 select * from asset where id = 1 

__contains

  • 包含指定值
代码语言:javascript
复制
info = Asset.objects.filter(system__contains='linux') # 等同于 select * from asset where name like '%linux'

__startswith

  • 以xxx开始
代码语言:javascript
复制
info = Asset.objects.filter(system__startswith='linux')

__endswith

  • 以xxx结束
代码语言:javascript
复制
info = Asset.objects.filter(system__endswith='linux')

__gt

  • 大于指定值
代码语言:javascript
复制
info = Asset.objects.filter(id__gt='50') # 等同于select * from asset where id > 50
# __gte:大于等于
# __lt:小于
# __小于等于

__in

  • 查找数据是否在指定范围内
代码语言:javascript
复制
info = Asset.objects.filter(country__in=['中国','北京','河北']) # 等同于 select * from asset where country in ('中国','北京','河北') 

__range

  • 查抄数据是否在指定的区间范围内
代码语言:javascript
复制
info = Asset.objects.filter(age__range=(18,45)) # 等同于 select * from asset where age between 18 and 45
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • all()方法
  • values()方法
  • values_list方法
  • order_by方法
  • filter()
  • exclude()
  • get()
  • 查询谓词
    • __exact
      • __contains
        • __startswith
          • __endswith
            • __gt
              • __in
                • __range
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档