iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >如何理解Django ORM操作
  • 520
分享到

如何理解Django ORM操作

2024-04-02 19:04:59 520人浏览 泡泡鱼
摘要

这篇文章主要讲解了“如何理解Django ORM操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解DjanGo ORM操作”吧!查询聚合操作聚合操作

这篇文章主要讲解了“如何理解Django ORM操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解DjanGo ORM操作”吧!

查询

聚合操作

聚合操作,不要被名字吓到了,通常用在筛选完一些数据之后,求一下平均值了,什么的。

例如:求所有书的总价格和平均价格

原生sql

SELECT     SUM(price) AS "所有书总价格",     avg(price) AS "所有书平均价格" FROM WEB_book;

T SUM(price) AS "所有书总价格", avg(price) AS "所有书平均价格"FROMweb_book;

执行结果

如何理解Django ORM操作

ORM

price = models.Book.objects.all().aggregate(Sum("price"),Avg("price"), ) print(price)

执行结果

如何理解Django ORM操作

可以发现和上面是一样的,但是会发现列名是默认是字段__聚合函数名。

原生sql是可以指定显示的列名的,同样,ORM也可以。

代码

# 需要导入的包 from django.db.models import Avg,Sum  price = models.Book.objects.all().aggregate(所有书总价格=Sum("price"), 所有书平均价格=Avg("price"), ) print(price)

执行结果

如何理解Django ORM操作

:price的类型直接就是dict,所以,在这是不能查看原生sql的。

但是上述ORM对应的原生SQL确实如上,所以那样理解就行了。

分组操作

分组操作,就是将某一列,相同的值进行压缩,然后就可以得出压缩值的数量。

如果压缩的是外键,还可以取出外键的详细信息。

示例:查询出每个出版社出版的数量。

通过研究表结构发现,每出版的书,都在book表中记录,并且每本书会外键一个出版社id。

如何理解Django ORM操作

如果我们能对出版社id进行压缩,然后再求出压缩出版社id里面对应的数量。

啧啧,这不就出来了吗?

代码

from django.db.models import Count  ret = models.Book.objects.values("publish_id").annotate(publish_count=Count("publish_id")) print(ret)

执行结果

如何理解Django ORM操作

原生sql

SELECT     `web_book`.`publish_id`,     COUNT(`web_book`.`publish_id`) AS `publish_count` FROM     `web_book` GROUP BY     `web_book`.`publish_id`;

ORM分组和原生SQL对应图

这一块,我记得当初我迷茫了一段时间,主要是不知道如何和原生SQL对应上,根据多次测试经验,对应图如下。

如何理解Django ORM操作

分组获取外键字段信息

上述确实可以通过分组实现了功能。

但是上述只能获取出版社id,并不能获取出版社名啥的,但是如何获取压缩外键字段详细信息呢?

代码

ret = models.Book.objects.values("publish_id").annotate(publish_count=Count("publish_id")).values("publish__title","publish__phone","publish_count") print(ret)

执行结果

如何理解Django ORM操作

:分组(annotate)后面跟的values。

里面只能写外键字段的列和annotate里面的列,不能写其他。

如果分组分的不是外键字段,那就不能再跟values!

分组再筛选

分组再筛选本质就是原生sql的group by .. having,将压缩完的数据在进行条件判断。

但是对压缩的数据进行判断只能通过having。

示例:查询出版社出版的书大于2本的数据。

代码

ret = models.Book.objects.values("publish_id") \     .annotate(publish_count=Count("publish_id")) \     .filter(publish_count__gt=2) print(ret)

执行结果

如何理解Django ORM操作

F查询

有时候,我们可能有这样的需求,就是两个列之间进行比较。

比如经典问题,一个商品,找到收藏数大于销量的商品等之类的两列进行比较的需求。

示例:查询book表,评论数小于收藏数的数据。

代码

from django.db.models import F  book = models.Book.objects.filter(comment_num__lt=F("collect_num")) print(book)

实际结果

如何理解Django ORM操作

执行结果

如何理解Django ORM操作

F对象还支持加减乘除后的比较

示例:评论数小于两倍收藏数的数据。

代码

可是*,也可以是-,+,÷

from django.db.models import F  book = models.Book.objects.filter(comment_num__lt=F("collect_num")*2) print(book)

执行结果

如何理解Django ORM操作

F对象还适用于更新

代码

models.Book.objects.all().update(price=F("price")+30)

Q查询

通常情况下,我们使用的filter(条件1,条件2,...),执行的都是and查询。

但是通常一些时候,我们需要执行or查询。

比如book表,查询title=<<大明帝国>> or title=<<安史之乱>>的。

这时候,如果使用Django ORM,就只能使用Q查询构建条件。

代码

from django.db.models import Q  books = models.Book.objects.filter(Q(title="<<大明帝国>>") | Q(title="<<安史之乱>>")) print(books)

执行结果

如何理解Django ORM操作

:|是or的意思,&是and的意思。

所以,如果将上述的|换成&,filter(条件1,条件2,...)一个意思,还是and。

Q查询之~

~相当于not。

示例:查询title = "<<大明帝国>>" or title != "<<安史之乱>>"。

代码

from django.db.models import Q  books = models.Book.objects.filter(Q(title="<<大明帝国>>") | ~Q(title="<<安史之乱>>")) print(books)

执行结果

如何理解Django ORM操作

Q查询和and混合查询

Q查询和and查询同时出现,Q查询必须在其他查询之前。

示例:查询title = "<<大明帝国>>" or title != "<<安史之乱>>"  并且publish_id=1的。

代码

from django.db.models import Q  books = models.Book.objects.filter(Q(title="<<大明帝国>>") | ~Q(title="<<安史之乱>>"),publish_id=1) print(books)

执行结果

如何理解Django ORM操作

动态构造Q查询

一些时候,我们可能并不太确定有什么条件。

可能是动态传的,传过来多少,就拼接多少。

Q查询,就能做到这个,在做动态Q查询时,动态Q不仅支持or,还支持and。

示例:查询publish_id=1或者title模糊=大明 的书。

代码

q = Q() # 查询方式,or还是and q.connector = "or"  # or,and # publish_id=1 q.children.append(("publish_id", "1")) # title__contains="大明" q.children.append(("title__contains", "大明"))  books = models.Book.objects.filter(q) print(books)

执行结果

如何理解Django ORM操作

上面说了那么多,终于算是大概说完了,来简单看一下怎么添加一条数据吧。

示例:添加一本书

代码

方式一,通过objects.create。

这种方式用的最多。

models.Book.objects.create(     title="<<人类简史2>>",     price=66.66,     PublishDate="2020-01-02",     comment_num=23,     collect_num=12,     # 外键字段 django models对应的Mysql 为 字段_id     publish_id=1,     # publish字段需要是一个 Publish 对象     # publish=models.Publish.objects.filter(id=1) )

方式二,通过model对象.save()。

book_obj = models.Book(     title="<<人类简史2>>",     price=66.66,     PublishDate="2020-01-02",     comment_num=23,     collect_num=12,     # 外键字段 django models对应的mysql 为 字段_id     publish_id=1, ) book_obj.save()

方式三,通过字典方式。

可能有的时候,我们正好将传过来的参数构造成了一个字典,那就太好了,不需要再一个个取。

c_dict = {     "title":"<<tcp编程入门到精通2>>",     "price":88.1,     "PublishDate":"2020-01-03",     "comment_num":13,     "collect_num":78,     "publish_id":1, } models.Book.objects.create(**c_dict)

更新

:update只能跟在在filter之后。

示例:将title="<<大明帝国>>"的数据修改为title="<<大明帝国666>>"。

代码

models.Book.objects.filter(title="<<大明帝国>>").update(title="<<大明帝国666>>")

filter可能筛选到的是多个值,一定要注意

删除

delete只能跟在filter之后。

示例:删除title=<<大明帝国666>>的数据。

models.Book.objects.filter(title="<<大明帝国666>>").delete()

感谢各位的阅读,以上就是“如何理解Django ORM操作”的内容了,经过本文的学习后,相信大家对如何理解Django ORM操作这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何理解Django ORM操作

本文链接: https://www.lsjlt.com/news/84082.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解Django ORM操作
    这篇文章主要讲解了“如何理解Django ORM操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Django ORM操作”吧!查询聚合操作聚合操作...
    99+
    2024-04-02
  • 如何了解Django ORM操作
    本篇内容主要讲解“如何了解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何了解Django ORM操作”吧!查询操作对象.外键字段比如,我们拿到了一个书的信息,我们可以...
    99+
    2023-06-15
  • 怎么理解Django ORM操作
    本篇内容主要讲解“怎么理解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Django ORM操作”吧!表结构设计还是从实际角度出...
    99+
    2024-04-02
  • django--ORM的单表操作
    Django--ORM单表操作创建一个新的django项目项目目录结构:Django连接数据库配置重点:第一步:修改settings.py文件DATABASES = {     &...
    99+
    2023-01-30
    操作 django ORM
  • django操作非ORM创建的表
    django--ORM连接已存在的表问题:django的ORM怎么连接已存在的表,然后进行增删查改操作?工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢下面介绍一种完美解决方案:...
    99+
    2023-01-30
    操作 django ORM
  • Python Django ORM连表正反操作技巧
    一、A表男生,B表女生,C表关系 1通过A表查与某个男生有关系的所有女生 思想1:在A表中确认男生后,通过反查到C表,获取相关内容(QuerySet),然后再跨到B表获取所有女生信...
    99+
    2024-04-02
  • Django静态文件配置request对象方法ORM操作讲解
    目录django框架请求流程静态文件及相关配置请求方法request对象方法pycharm链接MySQLDjango链接MySQLDjango ORMORM语法ORM外键关联djan...
    99+
    2024-04-02
  • Django ORM 事务和查询优化的操作方法
    目录一、事务操作二、 ORM 惰性查询三、only与defer四、select_related与prefetch_related一、事务操作 模块 from django....
    99+
    2024-04-02
  • Django ORM中,如何使用Coun
    示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量。 示例models # models.py from django.db im...
    99+
    2023-01-31
    如何使用 Django ORM
  • Python Django ORM 深潜:掌控数据库操作的艺术
    Django 对象关系映射器 (ORM) 是一个强大且灵活的工具,它允许 Django 开发人员以面向对象的方式与数据库交互。通过使用 ORM,开发人员可以将数据库表映射到 Python 类,并通过这些类来访问和操作数据库中的数据。 Dj...
    99+
    2024-04-02
  • Django框架ORM操作数据库不生效问题示例解决方法
    目录问题描述定位过程 首先,我们怀疑是SQL语句拼装错误(比如ID不对),导致了删除不生效解决方案总结本文详细描述使用Django 的ORM框架操作PostgreSQL数据库删除不生...
    99+
    2023-01-07
    django orm操作数据库不生效 django orm框架操作
  • thinkphp如何使用ORM进行数据库操作
    本篇内容介绍了“thinkphp如何使用ORM进行数据库操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ThinkPHP 是一款基于 PH...
    99+
    2023-07-06
  • Django中ORM基本应用与原理解析
    目录1.ORM构建数据表2.数据迁移3.Model相关的概念与使用方法Model的组成部分Meta元数据类属性说明Field的通用字段选项基础字段类型关系字段类型多对一一对一多对多关...
    99+
    2024-04-02
  • 如何理解Java ORM框架guzz
    本篇文章给大家分享的是有关如何理解Java ORM框架guzz,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。guzz 1.3.1 大版本更新噢: 动态拼接SQL终于...
    99+
    2023-06-17
  • Django 中的Timezone 处理操作
    Django 中的时区 在现实环境中,存在有多个时区。用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统。所以如果网站面向的是多个时区用户,只以当前时间为标准开...
    99+
    2024-04-02
  • 如何理解grep的操作
    这篇文章给大家介绍如何理解grep的操作,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。[root@irac01 ~]# ps -ef|grep '2034\|2035\|2005\|2037'gdm &...
    99+
    2023-06-06
  • Python Shell 与 Django ORM:如何快速高效地处理数据?
    Python 是一种非常流行的编程语言,而 Django 是一个开发 Web 应用程序的框架。在这个框架中,ORM(对象关系映射)模块是非常重要的,因为它可以帮助开发人员快速高效地处理数据。本文将介绍如何使用 Python Shell 和...
    99+
    2023-06-14
    shell spring django
  • go第三方库sqlx操作MySQL及ORM原理
    目录sqlx实战准备工作编写代码添加引用创建连接增删改查预处理语句数据库事务sqlx干了什么MustXXXNamedXXXXXXScansqlx是Golang中的一个知名三方库,其为...
    99+
    2024-04-02
  • Django如何利用LogEntry生成历史操作
    小编给大家分享一下Django如何利用LogEntry生成历史操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在开发测试平台的时候,虽然对某些关键功能做了权限设置,但毕竟是公司多人使用,有些数据的配置可能不小心被他人修改...
    99+
    2023-06-22
  • Django图书管理系统(单表操作)
    以下内容需要掌握: Python3 以及前端:HTML,CSS,jQuery,BootStrap,Django,JavaScript 开启Django新项目: 1,settings.py  数据库选择: ①sqlite3(Django自...
    99+
    2023-01-30
    图书管理系统 操作 Django
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作