Django的ORM操作-查询数据
Django,ORM,操作,查询,数据
2025-03-13 21:27:21 时间
- 数据库的查询需要使用管理器对象进行
- 通过
mymodel.objects
管理器方法调用查询对象
方法 | 说明 |
---|---|
all() | 查询全部记录,返回QuerySet查询对象 |
get() | 查询符合条件的单一记录 |
filter() | 查询符合条件的多条记录 |
exclude() | 查询符合条件外的全部记录 |
all()方法
- 使用方法:
Asset.objects.all()
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中输出的格式
def __str__(self):
return "创建日期:%s" "物理机信息:%s"%(self.create_date,self.physics_host)
values()方法
- 用法:
Asset.objects.values()
- 作用:查询部分列的数据并返回 等同于
select 列1,列2 from table
- 依旧返回QuerySet只不过里面放的是dict字典
>>> 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中
- 会将查询出来的数据封装到元组中,在封装到查询集合
>>> 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
对查询结果根据某个字段选择性的进行排序,默认是升序格式,降序排列需要在列前增加-
表示
>>> 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容器对象,内部存放模块实例
# 查询数据库中 create_user为admin的
from monitor.models import Asset
info = Asset.objects.filter(create_user="admin")
for i in info:
print("查询结果",i.create_date)
# 查询数据库中 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(条件)
- 作用:返回不包含此条件的数据集
# 查询数据库中 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
异常
from monitor.models import Asset
info = Asset.objects.get(create_user="admin",system="Linux")
for i in info:
print("查询结果",i.create_date)
查询谓词
- 定义:做更灵活的条件查询时候需要使用查询谓词
- 每一个查询谓词是一个独立的查询功能
__exact
- 等值匹配
info = Asset.objects.filter(id__exact=1) # 等同于 select * from asset where id = 1
__contains
- 包含指定值
info = Asset.objects.filter(system__contains='linux') # 等同于 select * from asset where name like '%linux'
__startswith
- 以xxx开始
info = Asset.objects.filter(system__startswith='linux')
__endswith
- 以xxx结束
info = Asset.objects.filter(system__endswith='linux')
__gt
- 大于指定值
info = Asset.objects.filter(id__gt='50') # 等同于select * from asset where id > 50
# __gte:大于等于
# __lt:小于
# __小于等于
__in
- 查找数据是否在指定范围内
info = Asset.objects.filter(country__in=['中国','北京','河北']) # 等同于 select * from asset where country in ('中国','北京','河北')
__range
- 查抄数据是否在指定的区间范围内
info = Asset.objects.filter(age__range=(18,45)) # 等同于 select * from asset where age between 18 and 45
相关文章
- Django模板引擎中变量作为属性值调用
- 一次完整的 Django 项目的迁移,有关 MySQL 数据库的导出与导入
- Django的ORM字段类型-2
- Django的ORM操作-更新数据
- Python进阶26-Django 视图层
- Python进阶27-Django 路由层
- 在 Linux 服务器上使用 Nginx + Gunicorn 部署 Django 项目的正确姿势
- 一个提供公告和打赏功能的 django 应用插件 django-tctip
- Python进阶31-Django 分页器
- pycharm中安装django_pycharm环境配置教程
- Django-缓存内容
- Python进阶37-smtp及Django发邮件
- Django的ORM操作-删除数据
- Django-Admin后台管理内容
- Django的ORM简介
- Python项目52-Django封装支付宝支付
- Django实现调用腾讯云短信接口
- pycharm django环境搭建_IDEA如何创建项目
- Django学习笔记一初识Django
- Django Web 极简教程(六)- Django Form(Part A)