django orm 原生sql,django中orm与一般数据库访问的区别

  django orm 原生sql,django中orm与一般数据库访问的区别

  Django中的ORM之查:

  1.对象查询

  向前搜索

  res1=Book.objects.first()

  打印(res1.title)

  打印(res1.price)

  打印(res1.publish)

  Print(res1.publisher.name)#由于一对多关系,res1.publisher是一个对象,而不是QuerySet集合。

  res2=Publish.objects.last()

  打印(res2.name)

  打印(res2.city)

  print(res2 . book _ set . all())# res2 . book _ set是一个QuerySet集合,所以集合中的所有对象元素都会被打印出来。2.双下划线(_)查询

  带双下划线(_ _)的单表条件查询

  示例:

  1.objects.filter (id _ _ lt=10,id _ _ gt=1) #获取id小于10且大于1的记录。

  1.objects.filter (id _ _ in=[11,22,33,44]) #获取id为in [11,22,33,44]的记录

  1.objects.exclude (id _ _ in=[11,22,33,44]) #获取id不在[11,22,33,44]中的记录

  1 . objects . filter(name _ _ contains= content 1 )#获取名称包含 contents 的记录(区分大小写)

  1 . objects . filter(name _ _ I contains= content1 )#获取名称包含 content 1 (不区分大小写)的记录

  table . objects . filter(id _ _ range=[1,4]) #可用于获取ID在1到4(不包括4)之间的记录的条件3360

  Startswith#指定开头的匹配条件。

  Artswith #指定开头的匹配条件(忽略大小写)

  Endswith#指定结束匹配条件。

  使用双下划线(_ _)指定结束匹配条件的Endswith #多表条件查询(忽略大小写)。

  向前搜索的一对一查询(条件)

  #查询id号res3=book . objects . filter(title= python )。标题为“python”的图书的值(“id”)

  打印(res3)正向查找(条件)一对多查询

  "brush:php;toolbar:false">#查询书名为"python"的书对应的出版社的地址res4=Book.objects.filter(title="python").values("publisher__city")

  print(res4)#查询"aaa"作者所写的所有的书的名字res5=Book.objects.filter(author__name="aaa").values("title")

  print(res5)#查询"aaa"作者所写的所有的书的名字(与上面的用法没区别)res6=Book.objects.filter(author__name="aaa").values("title")

  print(res6)反向查找之一对多查询

  

#查询出版了书名为"python"这本书的出版社的名字

反向查找之多对多查询

 

  

#查询所写的书名为"python"的作者的名字

条件查询即与对象查询对应,是指filter,values等方法中的通过__来明确查询条件

 

  3、聚合查询和分组查询

  

aggregate(*args,**kwargs)

  通过到QuerySet进行计算,返回一个聚合值的字典,aggregate()中的每一个参数都指定一个包含在字典中的返回值,即在查询集合中生成聚合

  例子:

  

fromdjango.db.modelsimportAvg,Max,Min,Sum#计算所有书籍的平均价格,书籍最高的价格和最低价格

Django的查询语句提供了一种方式描述所有图书的集合

 

  

aggregate()子句的参数可以指定想要计算的聚合值.

可以为聚合值指定一个名称.

 

  

#计算所有书籍的平均价格,并给书籍的平均价格起一个别名

annotate(*args,**kwargs)

  可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合

  

#查询作者"aaa"所写的所有的书的名字

查询各个作者所写的书的总价格,就要使用分组

 

  

#查询每个作者所写的所有书籍的总价格

4、F查询和Q查询

 

  

F查询专门取对象中某列值的操作

  

#导入F

Q构建搜索条件

  

#导入Q

Q对象可以对关键字参数进行封装,从而更好的应用多个查询#查询table2表中以"aaa"开头的所有的title列

 

  

q1=table2.objects.filter(Q(title__startswith="aaa")).all()print(q1)

Q对象可以组合使用&,操作符,当一个操作符是用于两个Q对象时,会产生一个新的Q对象

 

  

#查找以"aaa"开头,或者以"bbb"结尾的所有title

Q对象可以用"~"操作符放在表达式前面表示否定,也可允许否定与不否定形式的组合

 

  

#查找以"aaa"开头,且不以"bbb"结尾的所有title

Q对象可以与关键字参数查询一起使用,Q对象放在关键字查询参数的前面

 

  查询条件:

  

#查找以"aaa"开头,以"bbb"结尾的title且书的id号大于4的记录

更多Python知识,请关注:Python自学网!!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些
  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些,关系型数据库与非关系型数据库简介
  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 什么是分库分表,为什么要进行分库分表-,分库分表的区别,数据库分库分表是什么,什么情况下需要用分库分表
  • vb中adodb连接数据库,
  • treeview控件绑定数据,wpf treeview数据绑定,详解TreeView绑定数据库
  • sql的多表查询,数据库如何实现多表查询
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库,SQLServer2019 数据库的基本使用之图形化界面操作的实现
  • sql数据库定时备份怎么弄,mysql 定期备份
  • sql数据库定时备份怎么弄,mysql 定期备份,MySQL 数据库定时备份的几种方式(全面)
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar,SQL中varchar和nvarchar的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: