Django 查询表的几种方式

简介:

在Danjao中对单表进行查询是最基本的操作,其余的增加,删除,修改都是在查询的基础上实现的。


最基本的查询一般是通过filter过滤或者 all获取所有的值


例1:最基本用法


id等于一,而且名字等于root的条件

1
models.User.objects. filter ( id = 1 ,name = 'root' )


id大于一,而且名字是root的条件

1
models.User.objects. filter (id__gt = 1 ,name = 'root' )


id小于1的条件

1
models.User.objects. filter (id__lt = 1


filter内部的条件用字典的格式实现

1
2
dic = { 'name' : 'xx' , 'age' : 10 }
models.User.objects. filter ( * * dic)



在上面的例子中,获取的结果都是QuerySet类型,这个类型类似列表,里面每个元素都是一个完整的对象,拥有自己的属性,也就是表里每一行对应的字段。因此,如果需要获取列表里面的第一个元素,我们一般使用first(),比如v=models.Business.objects.filter(id=1).first(),  如果没有这个值,那么他返回的就是None;我们使用get()方法也可以获取表值,比如 models.Business.objects.get(id=1), 但是如果这个值不存在,那就直接报错了。因此比较推荐的方法是使用filter。



第二种查询方式是通过values来实现。通过这种方式获取的QuerySet,里面的每一个元素都是一个字典


例2:

1
models.Business.objects. all ().values( 'id' , 'caption' )


第三种方式是通过value_list来实现,这种方式获取的QuerySet,里面的每一个元素都是一个元祖


例3:

1
models.Business.objects. all ().values_list( 'id' , 'caption' )



下面看看具体


views.py

1
2
3
4
5
6
7
8
def  business(request):
     v1  =  models.Business.objects. all ()
     v2  =  models.Business.objects. all ().values( 'id' , 'caption' )
     v3  =  models.Business.objects. all ().values_list( 'id' , 'caption' )
     print (v1)
     print (v2)
     print (v3)
     return  render(request,  'business.html' , { 'v1' : v1, 'v2' : v2,  'v3' : v3})


控制台输出结果可以看见列表里面的元素分别是对象,字典和元祖。

1
2
3
<QuerySet [<Business: Business  object >, <Business: Business  object >, <Business: Business  object >, <Business: Business  object >]>
<QuerySet [{ 'caption' '运维部' 'id' 1 }, { 'caption' '开发' 'id' 2 }, { 'caption' '市场' 'id' 3 }, { 'caption' '测试' 'id' 4 }]>
<QuerySet [( 1 '运维部' ), ( 2 '开发' ), ( 3 '市场' ), ( 4 '测试' )]>



host.html


注意的是Python里面对象是通过点.来获取属性,字典通过dic['key']获取对应,元祖通过索引获取对应值

模板语言都是通过点来获取,即使字典的key和索引也是一样!


第二个注意的是有些值,比如id 我不希望客户端直接看见,但是又希望调用,那么可以作为某个标签的一个属性存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
< html  lang = "en" >
< head >
     < meta  charset = "UTF-8" >
     < title ></ title >
</ head >
< body >
     < h1 >业务线列表(对象)</ h1 >
     < ul >
         {% for row in v1 %}
             < li >{{ row.id }} - {{ row.caption }} - {{ row.code }}</ li >
         {% endfor %}
     </ ul >
     < h1 >业务线列表(字典)</ h1 >
     < ul >
         {% for row in v2 %}
             < li >{{ row.id }} - {{ row.caption }}</ li >
         {% endfor %}
     </ ul >
     < h1 >业务线列表(元组)</ h1 >
     < ul >
         {% for row in v3 %}
             < li >{{ row.0 }} - {{ row.1 }}</ li >
         {% endfor %}
     </ ul >
</ body >
</ html >


结果如下


wKioL1l25mXx55hHAACJBK2LlTQ706.jpg


最后值得一提的是外键的查询


例如 b指向了另外一个表

1
2
v = models.Host.objects. filter (nid__gt = 0 )
v[ 0 ].b.caption






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1950806,如需转载请自行联系原作者

目录
相关文章
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
965 173
|
8月前
|
SQL 存储 数据库
Django模型查询与性能调优:告别N+1问题
本文详解Django数据库查询基础与优化技巧,涵盖QuerySet使用、关联查询(一对多/多对多)、N+1查询问题及解决方案(select_related、prefetch_related)、高级查询方法及项目实战中的数据权限控制实现。
336 0
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
SQL 缓存 数据库
10 Django模型 - 模型查询
10 Django模型 - 模型查询
123 0
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
433 0
|
SQL 前端开发 Python
基于python-django的neo4j人民的名义关系图谱查询系统
基于python-django的neo4j人民的名义关系图谱查询系统
283 0
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
306 1
|
关系型数据库 MySQL 数据库连接
数据迁移到 Django 模型表:详尽指南
数据迁移是许多应用程序开发过程中必不可少的一部分。在这篇文章中,我们将详细分析和总结如何通过一个定制的 Django 管理命令,将数据从 MySQL 数据库迁移到 Django 模型表中。这种方法可以确保数据在多个数据库之间有效且安全地迁移,同时避免了手动操作的繁琐和错误。
|
JSON 数据库 数据格式
使用 Django Q 对象构建复杂查询条件
通过本文示例,我们展示了如何使用Django的Q对象来构建复杂的查询条件,以及如何实现分页功能。Q对象的强大之处在于它能够轻松地组合多个查询条件,支持“与”、“或”关系,极大地提高了查询的灵活性和可读性。希望本文对你在实际项目中使用Django ORM构建复杂查询有所帮助。
|
存储 SQL 数据处理
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解