博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django ORM 操作 必知必会13条 单表查询
阅读量:6279 次
发布时间:2019-06-22

本文共 3678 字,大约阅读时间需要 12 分钟。

ORM 操作 必知必会13条

import os# if __name__ == '__main__':  # 当前文件下执行os.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')import djangodjango.setup()  # 初始设置  脚本 加载了Django环境from app01 import modelsret = models.Person.objects.all()        # QuerySet   all 所有ret = models.Person.objects.get(pk=101)  # 获取不到或者多个就报错   获取某一条数据  对象ret = models.Person.objects.filter(name = 'alex') # QuerySet  对象列表 满足条件ret = models.Person.objects.exclude(name = 'alex')# 满足条件后取反--反选 对象列表ret = models.Person.objects.values() # QuerySet  获取数据所有字段的值 不再是对象,变成字典ret = models.Person.objects.filter(name = 'alex').values() # QuerySet  获取条件数据所有字段的值 不再是对象,变成字典ret = models.Person.objects.filter(name = 'alex').values('pid','name') # QuerySet  获取条件数据所有字段的值 不再是对象,变成字典        # 不指定字段显示所有,指定字段显示选择内容  { 值 值}ret = models.Person.objects.filter(name = 'alex').values_list() # QuerySet  获取条件数据所有字段的值 不再是对象,变成字典        # 获取字段的值 元组 ( 值 值 )        --> 传字段ret = models.Person.objects.all().order_by('-pid','age')  # 升序   -pid 降序  左优先  多个字段排序ret =ret.reverse()  # 排好序的 后面反转的ret = models.Person.objects.all()  # 这个用reverse 没效果     models.py 中  class Meta: ordering = ('pid')ret = models.Person.objects.all().distinct()    # distinct() 去重   mysql不支持按字段去重ret = models.Person.objects.values('name').distinct()    # distinct() 去重ret = models.Person.objects.count()  # 计数ret = models.Person.objects.filter(pid=122).first() # 第一个   查不到/不报错/返回Noneret = models.Person.objects.all().last()  # 取最后一个ret = models.Person.objects.filter(pid=100).exists()  # 查存在不  返回True/Flase
总结:返回queryset的有 all() , filter() , exclude() , order_by() , reverse() , distinct()特殊的queryset的有 values()  values_list()返回数字的:count()返回具体对象的get()  first()  last()返回布尔值的exists()

单表的双下划线方法

import osos.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')import djangodjango.setup()   # 初始化# 单表查询from app01 import modelsret = models.Person.objects.filter(pk__gt=100) # greater than 大于ret = models.Person.objects.filter(pk__lt=100) # less than 小于ret = models.Person.objects.filter(pk__gte=100) # greater than equal 大于等于
ret = models.Person.objects.filter(pk__lte=100) #小于等于 ret = models.Person.objects.filter(pk__in=[100,103]) #查几个
ret = models.Person.objects.exclude(pk__in=[100,103]) #原生sql 中的 not in ret = models.Person.objects.filter(pk__lte=103,pk__gte=100) # 大于等于 -- 小于等于
ret = models.Person.objects.filter(pk__range=[100,103])     # 什么范围 ret = models.Person.objects.filter(name__contains = 'l') # 原生sql中的 like 包含 ret = models.Person.objects.filter(name__icontains = 'L') # 大小写  不敏感 ret = models.Person.objects.filter(name__startswith = 'x') # 开头 ret = models.Person.objects.filter(name__istartswith = 'X') # 不敏感处理 ret = models.Person.objects.filter(name__endswith = 'X') # 以什么结束 ret = models.Person.objects.filter(name__iendswith = 'X') #  不敏感处理 ret = models.Person.objects.filter(birth__year='2019') #条件查询 ret = models.Person.objects.filter(birth__month='01') # 查不到 ret = models.Person.objects.filter(birth__contains='2019-01-24') # 能查了 ret = models.Person.objects.filter(age__isnull=True) # 是否为空

 外键查询

正向查找对象查找(跨表)语法:对象.关联字段.字段book_obj = models.Book.objects.first()  # 第一本书对象print(book_obj.publisher)  # 得到这本书关联的出版社对象print(book_obj.publisher.name)  # 得到出版社对象的名称字段查找(跨表)语法: 关联字段__字段print(models.Book.objects.values_list("publisher__name"))------------------------------------------------------------------反向查找对象查找语法:obj.表名_setpublisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书titles = books.values_list("title")  # 找到第一个出版社出版的所有书的书名字段查找语法:表名__字段titles = models.Publisher.objects.values_list("book__title")

ManyToManyField

 

转载于:https://www.cnblogs.com/zhangchen-sx/p/10321780.html

你可能感兴趣的文章
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>
httpd – 对Apache的DFOREGROUND感到困惑
查看>>
分布式锁的一点理解
查看>>
idea的maven项目,install下载重复下载本地库中已有的jar包,而且下载后jar包都是lastupdated问题...
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web服务器
查看>>
树莓派3链接wifi
查看>>
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>
DWR实现服务器向客户端推送消息
查看>>