我的编程空间,编程开发者的网络收藏夹
学习永远不晚

django的数据库ORM进阶操作

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

django的数据库ORM进阶操作


	django的数据库ORM进阶操作
[数据库教程]

1、数据库查询的三种方式

正向查询:

(1)获取全部数据all

    v1=models.UserInfo.objects.all().first()    #取出Querryset类型数据,里面是对象,需循环取出

    v1.ut    #跨表,ut是外键

(2)只取部分字段value,  外键__字段

    v2=models.UserInfo.objects.values("id","name","ut__title")   #取出的是Querryset类型数据,里面是字典[{‘id‘:1,"name‘:"运维"},{}]

    for i in v2:

      print(i["ut__title"])

(3)获取元组格式value_list, 外键__字段

    v3=models.Business.objects.value_list("id","name","ut__title")  #取出的是Querryset类型数据,里面是元组[(1,运维),(2,开发),]

    for i in v3:

      print(i["ut__title"])

反向查询:

(1)all(),使用  表名小写_set  进行反查

    obj=models.UseType.objects.all().first()

    obj.userinfo_set.all()   #反查出所有,querry对象

(2)values反向查询, 小写的表名

    obj=models.UseType.objects.values("id","title","userinfo")

 

    obj=models.UseType.objects.values("id","title","userinfo__name")

(3)values_list反向查询, 小写的表名

    obj=models.UseType.objects.values_list("id","title","userinfo")

    obj=models.UseType.objects.values_list("id","title","userinfo__name")

 

2、知识点:查看你的代码所执行的sql语句:query

v=models.UserInfo.objects.values(‘ug_id‘)
print(v.query)

 

3、其他操作

(1)order_by:排序 

从小到大:

user_list=models.UserInfo.objects.all().order_by("id")

从大到小:

user_list=models.UserInfo.objects.all().order_by("-id")

设置第二字段排序:

user_list=models.UserInfo.objects.all().order_by("-id","name")

 

(2)分组 annotate : 相当于 group_by和having

models.Host.objects.values("linkman").annotate(count=Count("id"))

   #SELECT `cmdb_host`.`linkman_id`, COUNT(`cmdb_host`.`id`) AS `count` FROM `cmdb_host` GROUP BY `cmdb_host`.`linkman_id` ORDER BY NULL

models.Host.objects.values("linkman").annotate(count=Count("id")).filter(count__gt=2)

  #SELECT `cmdb_host`.`linkman_id`, COUNT(`cmdb_host`.`id`) AS `count` FROM `cmdb_host` GROUP BY `cmdb_host`.`linkman_id` HAVING COUNT(`cmdb_host`.`id`) > 2 ORDER BY NULL

 

(3)filter/exclude:where条件

models.Host.objects.values("ip").filter(id="2")

    #SELECT `cmdb_host`.`ip` FROM `cmdb_host` WHERE `cmdb_host`.`id` = 2

models.Host.objects.values("ip").exclude(id="2")

    #SELECT `cmdb_host`.`ip` FROM `cmdb_host` WHERE NOT (`cmdb_host`.`id` = 2)

 

4、高级操作

(1)F:获取原字段原值进行更新操作

v=models.Host.objects.filter(id=2).update(linkman_id=F(‘linkman_id‘)-1)

    #UPDATE `cmdb_host` SET `linkman_id`=`linkman_id`-1 WHERE id=2

(2)Q:用于构造复杂的查询条件,例如应用组合搜索

 

models.Host.objects.filter(Q(id__gt=10)&Q(id__lt=15))

 

   #SELECT `cmdb_host`.`id`, `cmdb_host`.`device_modle`, `cmdb_host`.`use_status`, `cmdb_host`.`device_role`, `cmdb_host`.`ip`, `cmdb_host`.`root_password`, `cmdb_host`.`linkman_id` FROM `cmdb_host` WHERE (`cmdb_host`.`id` > 10 AND `cmdb_host`.`id` < 15)

  技术图片

 

  技术图片

 

(3)extra:更复杂的查询

 

 

 技术图片

(4)使用原生sql语句

指定使用其他数据库:

  技术图片

 

技术图片

 

 5、性能优化操作

(1)普通执行all():取得的结果是Querryset对象,但是在执行循环的时候需要连表时一次一次再做连表查询。

(2)select_related:在第一次查询的时候主动做连表,后面循环不需要再去做连表。适合数据比较少的情况

  一次性查询:加select_related(外键)

   技术图片

 

 

(3)prefetch_related:也是在第一次查询的时候查出所有数据,但是形式不是连表,而是做两次单表查询。适合数据量大的情况

  技术图片

 

django的数据库ORM进阶操作

原文地址:https://www.cnblogs.com/chenxiaozan/p/13386547.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

django的数据库ORM进阶操作

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

下载Word文档

猜你喜欢

django的数据库ORM进阶操作

1、数据库查询的三种方式正向查询:(1)获取全部数据all    v1=models.UserInfo.objects.all().first()    #取出Querryset类型数据,里面是对象,需循环取出    v1.ut    #跨表,ut是外键(2)
django的数据库ORM进阶操作
2017-08-05

Django视图之ORM数据库查询操作API的实例

查询表记录 查询相关API 操作:models.表名.objects.方法()
all(): 查询所有结果 filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 get(**kwargs): 返回与所给
2022-06-05

thinkphp如何使用ORM进行数据库操作

本篇内容介绍了“thinkphp如何使用ORM进行数据库操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ThinkPHP 是一款基于 PH
2023-07-06

Django的ORM操作最重要的查询与编辑数据库中的数据

Django的ORM操作最重要的查询与编辑数据库中的数据。Django ORM 常用的函数以及修饰词函数名称或修饰词说明filter()返回符合指定条件的 QuerySetexclude()返回不符合指定条件的 QuerySetorder_by()串接到Que

	Django的ORM操作最重要的查询与编辑数据库中的数据
2020-02-14

django操作多数据库

1、    添加数据库路由分配文件在项目文件夹里创建‘database_router’文件。将下面的代码复制到该文件里。from django.conf import settings DATABASE_MAPPING = settings
2023-01-30

PHP 数据库操作与ORM 框架

php中操作数据库的方法有两种:低级pdo api和简化操作的orm框架。pdo允许直接与数据库交互,通过连接、查询和获取结果的步骤实现。orm框架(如doctrine)将数据库表映射为php类,简化了数据库操作,包括获取、查找和保存记录。
PHP 数据库操作与ORM 框架
2024-04-30

Django框架ORM操作数据库不生效问题示例解决方法

本文详细描述使用Django的ORM框架操作PostgreSQL数据库删除不生效问题的定位过程及解决方案,并总结使用ORM框架操作数据库不生效的问题的通用定位方法,感兴趣的朋友跟随小编一起看看吧
2023-01-07

DML (数据操作语言) 进阶指南:探索数据操作的更高境界

DML(数据操作语言)是数据库管理系统中用于对数据进行操纵和管理的语言。掌握DML可以帮助您更高效地处理和管理数据,从而提高数据库的性能和可靠性。
DML (数据操作语言) 进阶指南:探索数据操作的更高境界
2024-02-12

mysql数据库操作_高手进阶常用的sql命令语句大全

mysql数据库操作sql命令语句大全:三表连表查询、更新时批量替换字段部分字符、判断某一张表是否存在、自动增长恢复从1开始、查询重复记录、更新时字段值等于原值加上一个字符串、更新某字段为随机值、复制表数据到另一个表、创建表时拷贝其他表的数
2022-11-20

编程热搜

目录