Django ORM 操作 必知必会13条 单表查询
ORM 操作 必知必会13条
import os
# if __name__ == '__main__': # 当前文件下执行
os.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')
import django
django.setup() # 初始设置 脚本 加载了Django环境 from app01 import models
ret = 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() # 第一个 查不到/不报错/返回None
ret = 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 os os.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')
import django
django.setup() # 初始化 # 单表查询
from app01 import models ret = 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.表名_set
publisher_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
Django ORM 操作 必知必会13条 单表查询的更多相关文章
- 65、django之模型层(model)--添加、单表查询、修改基础
上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...
- django之模型层(model)--添加、单表查询、修改基础
上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
- django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询
from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...
- 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- 测试脚本配置、ORM必知必会13条、双下划线查询、一对多外键关系、多对多外键关系、多表查询
测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ' ...
- Django ORM单表查询必会13条
必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...
- 13条必知必会&&测试
1.13条必知必会 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> get(**kwargs) ...
- MySQL使用和操作总结(《MySQL必知必会》读书笔记)
简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...
随机推荐
- python安装提示ImportError: No module named web
今天在开发一个项目时出现错误,重新安装了一下python和yum,然后面板就无法启动了,提示需要安装web依赖,但是具体是哪个web源呢,pip install web不行 Traceback (mo ...
- 用xtrabackup2.4备份mysql5.6.30一直显示log scanned up to
用xtrabackup2.4备份mysql5.6.30一直显示log scanned up to 一直处于log scanned up to,只能ctrl+c强制终止备份 没有大事务 停止xtraba ...
- c#NamedPipe命名管道通信例子
服务端 private NamedPipeServerStream pipeServer; private Thread receiveDataThread = null; public fServe ...
- 小程序编辑器vscode
安装中文版 1)打开vscode工具: 2)使用快捷键组合[Ctrl+Shift+p],在搜索框中输入“configure display language”,点击确定后: 3)如图所示 =>安 ...
- CMDB资产管理
.传统运维和自动化运维的区别: 传统运维: 1.项目上线: a.产品经理前期调研(需求分析) b.和开发进行评审 c.开发进行开发 d.测试进行测试 e.交给运维人员进行上线 上线: 直接将代码交给运 ...
- (转)深度教程:POS和POW全解析
如果你是一名资深的比特币矿工或商人,你一定听说过POW和POS,但是当前在国内,却几乎没有人明白这到底是什么意思,也几乎没有相关的中文资料,小编吐血撰写,是为了让大家更好理解这些概念. 读完本文, ...
- Java 基础 面向对象之关键字内部类代码块修饰符
final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...
- centos下如何清除重复的$PATH变量值
运行: vim /etc/profile 添加如下代码: awk -F: '{ sep = "" for (i = 1; i <= NF; ++i) ...
- 命令行方式调用winrar对文件夹进行zip压缩示例代码
调用winRAR进行压缩 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- 修改easydialog标题
使用easyui作为前台框架极大的节省了项目资源,easyui官网文档中基本上囊括了所有的方法,但一些灵活性的方法文档中是找不到的,比如说动态替换窗口的属性,下边简单介绍些如何快速替换窗体的title ...