Python+django的ORM查询

2023-11-16

在使用python后端开发时,很多人都会遇到使用原生sql还是django自带的orm进行数据库的操作好呢?纠结的原因有很多,其中一点就是对orm不熟悉,导致某些查询可能不知道如何实现,于是采用了原生sql,今天,就让我们来总结一下常用的orm查询:

一、直接查询:

1、返回结果是列表里套对象:

models.Classes.objects.all()   # 相当于select * from classes;

2、返回结果是列表里套字典形式:

models.Classes.objects.values()  # 相当于 select * from classes
models.Classes.objects.values('id','name')  # 相当于 select id,name from classes,可指定查询的字段

3、返回结果是列表里套元组形式:

models.Classes.objects.values_list()   # 相当于 select * from classes
models.Classes.objects.values_list('id','name')   # 相当于 select id,name from classes,可指定查询的字段

二、过滤重复(distinct):

models.Classes.objects.values('name').distinct()  # select distinct name from classes

models.Classes.objects.values('id','name').distinct()  # 将(id,name)作为一组过滤

三、查询条件(where):

models.Classes.objects.filter(id=2)  # select * from classes where id = 2

models.Classes.objects.filter(id__gt=2)  # select * from classes where id > 2

models.Classes.objects.filter(id__gte=2)  # select * from classes where id >= 2

models.Classes.objects.filter(id__lt=2)  # select * from classes where id < 2

models.Classes.objects.filter(id__lte=2)  # select * from classes where id <= 2

models.Classes.objects.exclude(id=2)  # select * from classes where id != 2

models.Classes.objects.values().filter(id__lte=2,name='nick')  # select * from classes where id <= 2 and name ='nick'

四、包含......(in和not in):

models.Classes.objects.filter(id__in=[2,3])  # select * from classes where id in (2,3)

models.Classes.objects.exclude(id__in=[2,3])  # select * from classes where id not in (2,3)

 五、在......之间(between...and...):

models.Classes.objects.filter(id__range=[1,3])  # select * from classe where id between 1 and 3

六、模糊匹配(like):

models.Classes.objects.filter(name__endswith='on')  # select * from classes where name like "%on"

models.Classes.objects.filter(name__iendswith='on')  # select * from classes where name like "%on" 匹配时忽略大小写

models.Classes.objects.filter(name__startswith='aaa')  # select * from classes where name like "aaa%"

models.Classes.objects.filter(name__istartswith='bbb')  # select * from classes where name like "bbb%" 匹配时忽略大小写

models.Classes.objects.filter(name__contains='ccc')  # select * from classes where name like "%ccc%"

models.Classes.objects.filter(name__icontains='ccc')  # select * from classes where name like "%ccc%" 匹配时忽略大小写

 七、正则表达式:

models.Classes.objects.filter(name__regex='\w+')  # 正则表达式匹配

models.Classes.objects.filter(name__iregex='\w+')  # 正则表达式匹配,忽略大小写

  八、统计(count):

models.Classes.objects.count()  # select count(*) from classes

models.Classes.objects.filter(id__gt=2).count()  # select count(*) from classes where id > 2

  九、排序(order by):

models.Classes.objects.values().order_by('age')  # select * from classes order by age 升序

models.Classes.objects.values().order_by('-age')  # select * from classes order by age desc 降序

models.Classes.objects.values().order_by('age','-id')  # select * from classes order by age asc,id desc 先按age升序排,age相同的按id降序排

   十、分组(group by):

from django.db.models import Count,Min,Max,Sum,Avg  
res = models.Classes.objects.values('name').annotate(s=Sum('age'))  # select name,sum(age) as s from classes group by name; 通过名字分组,在统计每组的年龄之和
res = models.Classes.objects.values('name').annotate(s=Sum('age')).filter(s__gt=30) # 相当于select name,sum(age) as s from classes group by name having(s>30);

  十一、分页/前多少(limit):

models.Classes.objects.values()[1:3]  # 通过切片获取查询数 select * from classes limit 1,2

  十二、取最后一个(last),取第一个(first):

models.Classes.objects.last()  # 返回的是最后一个对象

models.Classes.objects.first()  # 返回的是第一个对象

  十三、取指定的字段,返回的是列表套对象(only):

models.Classes.objects.only('name')  # 只取name字段,但也会查id字段

  十四、取排除指定的字段后的所有字段,返回的是列表套对象(defer):

models.Classes.objects.defer('name')  # 不查name字段。select id, age from classes。指定为id时无效,还是会显示id字段

   十五、或者(Q):

from django.db.models import Q
models.Classes.objects.values().filter(Q(id__gte=3)|Q(name='nick'))  # select * from classes where id>=3 or name='nick'
models.Classes.objects.values().filter((Q(id__gte=3)|Q(name='nick'))&Q(age=19))  # select * from classes where (id>=3 or name='nick') and age=19

  十六、获取字段当前的值(F):

from django.db.models import F 
models.Classes.objects.update(age=F('age')+1)  # 将每个人的年龄加1

以上就是常用的一些orm查询,如果对你有所帮助,请点个赞,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python+django的ORM查询 的相关文章

  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s

随机推荐

  • 渗透系列之排序处产生的SQL注入问题

    1 在日常的测试过程中 发现系统的排序功能最容易产生sql注入 我们需要重点关注业务系统的排序功能 一般功能点对应这类字段 sortField sortOrder order orderby等 举个排序的SQL注入案例 发现系统的一个查询功
  • 2017-2018-1 20155227 《信息安全系统设计基础》第十三周学习总结

    2017 2018 1 20155227 信息安全系统设计基础 第十三周学习总结 找出全书你认为最重要的一章 深入重新学习一下 要求 期末占10分 完成这一章所有习题 详细总结本章要点 给你的结对学习搭档讲解你的总结并获取反馈 我选择教材第
  • 冯乐乐之六,基础光照模型

    需要理清的概念 兰伯特 半兰伯特 冯模型 布林冯模型 高光反射specular 代表物体表面反射光线 漫反射diffuse 代表吸收然后散射出表面的光线 环境光ambient 自发光emissive 漫反射 漫反射从任何方向看都是一致的 漫
  • 科学推理~

    科学推理 物理 1 力学 重力 重力并不是指向地心的 只有赤道可以 弹力 重点 判断弹力方向 相互作用力 摩擦力 静摩擦力 滑动摩擦力 注意 最大静摩擦力默认等于滑动摩擦力 压强 固体压强 液体压强 连通器 气体压强 气体对外做功 T 下降
  • 计算机图形学OpenGLC++实现: 橡皮筋技术实现折线和矩形的鼠标实现(附源码)

    废话不多说 直接开始 下列是会使用到的函数简单介绍 初始化背景 void Initial void 改变窗口大小 void ChangeSize int w int h 菜单响应函数 chooseWay int value 清除当前已经画的
  • Vue3 学习笔记 —— (一)深入理解组合式 API

    Vue3 学习笔记梳理 Vue3 学习 零 Vue3 0 与 Vue2 x 的性能对比 一 搭建环境 二 创建项目 三 Vue3 Composition API 3 1 ref or setup reactive 3 1 1 非响应式数据显
  • 北斗系统学习—JT808协议用C语言解析

    前言 本人从事于Linux应用开发 音视频应用方向 现在主要是负者AI摄像头的开发 在学音视频的途中 虽然是个小白 但是更愿意把自己所学音视频的一些知识分享给大家 以后每周都会更新哦 本期介绍的是用c语言对Jt808协议解析 要对协议进行解
  • NotWritablePropertyException

    ssm项目又来一个低级错误 粗心粗心 异常信息 Caused by org springframework beans NotWritablePropertyException Invalid property mapperLocation
  • 【机器学习】人工神经网络(ANN)浅讲

    神经网络是一门重要的机器学习技术 它是目前最为火热的研究方向 深度学习的基础 学习神经网络不仅可以让你掌握一门强大的机器学习方法 同时也可以更好地帮助你理解深度学习技术 本文以一种简单的 循序的方式讲解神经网络 适合对神经网络了解不多的同学
  • Layui富文本编辑器图片上传接口(.NET C#)

    本来想偷懒找个现成的接口 搜了一下发现没有现成的 那我在这写一个并分享给大家吧 demo打包好了在我的csdn下载中心 http download csdn net download xianglikai1 9970000 下面也有代码和结
  • 设置QListWidget背景色为透明

    只要一条指令就可以实现 ui gt listWidget gt setStyleSheet background color transparent 其中background color设置参考CSS背景设置如下 以下摘自 http www
  • PD通信协议芯片选型分析对比

    目录 一 PD SINK协议芯片对比图 二 总结 关键词 pd协议芯片 协议芯片 芯片通信协议 通信协议 前言 在如今快节奏生活不断蔓延的背景下 人们对各种事情的处理也渐渐地开始要求在保证质量的情况下 不断加快 手机快充就是一个典型的例子
  • iOS开发之Xcode 6更新默认不支持armv7s架构

    最近一次的Xcode 6更新默认不再支持arm7s架构 究竟是要废除不用呢还是仅仅只是一个疏忽 目前的Xcode 6配置里定义 ARCHS STANDARD 为armv7 arm64 当然这个定义前提是它会一再要求你删除掉你原本设定的构建架
  • 将对象的null字段赋值为默认值

    import java lang reflect Field import java math BigDecimal import java util ArrayList import java util Date import org a
  • 【Redis详细教程】Linux下如何安装Redis

    第一步 下载 redis wget https download redis io releases redis 6 2 6 tar gz 第二步 解压 redis 6 2 6 tar gz 并将其重新命名为 redis tar xvf r
  • 前端实现:点击硬币实现硬币翻转动画,且动画停止时正反面随机

    html div class pic box div class boxes div class box 硬币正面图片 img alt 硬币反面图片 img div div div
  • 基于Spring Boot + Vue的智慧宿舍管理系统设计与实现

    Java全能学习 面试指南 https javaxiaobear cn 摘要 随着智能化技术的快速发展 智慧宿舍管理系统在大学校园中得到了广泛的应用 本论文旨在设计并实现一种基于前后端分离的智慧宿舍管理系统 通过将前端和后端进行分离 提高系
  • windows安装minio

    官网下载地址 https min io download windows 进入minio exe的目录执行启动命令 minio exe server C Users wwwch Desktop minio data C Users wwwc
  • 基于循环神经网络的图像特定文本抽取方法

    作者的模型整体框架包含两部分 分别为 OCR 部分 采用人家的模型 输出文本 特定文本抽取部分 作者的工作 1 引言 早期图像特定文本抽取主要是通过 OCR 中的版面分析 Layout analysis 来实现 即首先利用 版面分析 的方法
  • Python+django的ORM查询

    在使用python后端开发时 很多人都会遇到使用原生sql还是django自带的orm进行数据库的操作好呢 纠结的原因有很多 其中一点就是对orm不熟悉 导致某些查询可能不知道如何实现 于是采用了原生sql 今天 就让我们来总结一下常用的o