查询API参考
这篇文档详细描述了QuerySet
API,是以现有的模型资料和数据库查询知道为基础,所以你在这之前需要阅读和理解这些文档。
在这篇参考中,我们用现有的weblog例子。
当QuerySets被求值
在内部,QuerySet被构造,过滤,裁切,分发,没有实际接触数据库直到被求值的时候。
你可以通过下面方法对QuerySet
求值
- 跌送. QuerySet 是可跌送的, 并且首先执行数据库查询。例如, 这个会打印数据库里所有entries 的 headline
for e in Entry.objects.all():
print e.headline
- 切片. 像说的那样限制QuerySets, QuerySet 可以被切片, 用Python的 array-slicing 语法. 通常切段 QuerySet会返回另一个QuerySet, 但是Django会执行数据库查询当你用 "step"切片参数语法.
-
序列化/缓存. 看下面的部分,详细介绍了当序列化 QuerySets涉及到的东西.Queryset结果从数据库里读取的重要
-
repr(). 当调用repr()时候QuerySet会被求值. 这是为了方便Python的交互解释, 因此当执行API交互时,你会立即看到结果
-
len(). 当调用len()时候QuerySet会被求值. 如你所预计的,这会返回queryset数量.
QuerySet API
尽管你通常不会手动创建一个,你会通过一个Manager,这个声明的QuerySet
class QuerySet
([
model=None
]
)
通常当你要和QuerySet交互,你会用过滤链的方式,大多数
QuerySet
的方法都会返回一个新的QuerySet
QuerySet方法返回新的QuerySet
filter(**kwargs)
返回一个匹配查询参数后的新的QuerySet
exclude(**kwargs)
返回一个不匹配查询参数后的新的QuerySet
Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello')
转化为SQL
SELECT ...
WHERE NOT (pub_date > '2005-1-3' AND headline = 'Hello')
Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3)).exclude(headline='Hello')
转化为SQL
SELECT ...
WHERE NOT pub_date > '2005-1-3'
OR NOT headline = 'Hello'
这个例子排除了所有pub_date大于 '2005-1-3' 或 headline 为 "hello" 的结果
order_by(*fields)
排序 Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
前面带 “-” 为降序
reverse()
将查询结果排序反转
distinct()
去重复
values(*fields)
把查询结果转化为字典列表取代model集合
# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
[<Blog: Beatles Blog>]
# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
同样也可以指定结果字段名
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
values_list(*fields)
将查询结果集的model转化为元组
>>> Entry.objects.values_list('id', 'headline')
[(1, u'First entry'), ...]
>>> Entry.objects.values_list('id').order_by('id')
[(1,), (2,), (3,), ...]
>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]
all()
取所有结果
select_related()
取关联数据,可设置关联数据的深度,如果不设置,关联数据为延迟加载方式读取。
# Hits the database.
e = Entry.objects.get(id=5)
# Hits the database again to get the related Blog object.
b = e.blog
# Hits the database.
e = Entry.objects.select_related().get(id=5)
# Doesn't hit the database, because e.blog has been prepopulated
# in the previous query.
b = e.blog
class City(models.Model):
# ...
class Person(models.Model):
# ...
hometown = models.ForeignKey(City)
class Book(models.Model):
# ...
author = models.ForeignKey(Person)
b = Book.objects.select_related().get(id=4)
p = b.author # Doesn't hit the database.
c = p.hometown # Doesn't hit the database.
b = Book.objects.get(id=4) # No select_related() in this example.
p = b.author # Hits the database.
c = p.hometown # Hits the database.
extra(select=None,
where=None,
params=None,
tables=None,
order_by=None,
select_params=None
扩展查询
有时候DJANGO的查询API不能方便的设置查询条件,提供了另外的扩展查询方法extra
select
Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
Blog.objects.extra(
select={
'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id'
},
)
Blog.objects.extra(
select=SortedDict([('a', '%s'), ('b', '%s')]),
select_params=('one', 'two'))
where
/ tables
Entry.objects.extra(where=['id IN (3, 4, 5, 20)'])
order_by
q = Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
q = q.extra(order_by = ['-is_recent'])
params
Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
分享到:
相关推荐
具体的用法可能需要参考库的官方文档或通过`help(bridgecrew)`命令获取内部模块和函数的详细信息。 **Python开发与后端应用** 在开发语言中,Python因其强大的库支持而被广泛应用于后端开发。开发者可以利用Python...
**PyPI官网下载 | pyGDM2-1.0.11.1-cp38-cp38-win_amd64.whl** ...对于具体的使用方法和示例,建议参考库的官方文档或者在线资源。在实际项目中,理解库的使用方式和适用场景是确保项目顺利进行的关键。
"Django 1.0 Cheat Sheet" 是一份非常实用的参考资料,为开发者提供了关于 Django 1.0 版本中的各种模板标签和过滤器的快速查阅指南。这份文档涵盖了从基本的文本格式化到复杂的日期和时间处理的各种功能。 #### ...
不过,由于`pyactup`的具体功能没有在描述中详细说明,具体的使用方法需要参考库的官方文档或通过查看源代码来了解。 总结,`pyactup`是一个针对Python 3的库,提供了特定的功能,适用于后端开发场景。通过`.whl`...
【标题】"双鱼林Python基于Django图书管理系统 v1.0-源码.zip" 提供的是一个使用Python编程语言和Django框架构建的图书管理系统的源代码版本。这个系统可能用于图书馆自动化管理,帮助管理员进行图书的入库、借阅、...
7. `docs/`: 可能包含项目的文档,如使用手册和API参考。 在使用"django-elevate"之前,开发者需要首先将其安装到Python环境中。这通常通过运行`python setup.py install`或使用现代的包管理工具如pip完成,例如`...
本书由Adrian Holovaty和Jacob Kaplan-Moss共同创作,于2006年首次发布,版本号v1.0,遵循GNU自由文档许可协议。 ### 关键知识点: #### Django框架介绍 Django框架以其“不要重复自己”(DRY)的原则著称,这意在...
5. 版本相关性:由于教程是针对特定版本的,读者需要注意在学习时可能需要参考当时该版本的官方文档和资源,因为新版本的Django可能会引入新的特性和改变现有功能的工作方式。 标签《django》 6. Django的核心特性...
《Python库django_json_api_model-0.0.5-py3-none-any.whl深度解析》 在编程领域,Python以其简洁、易读的语法和强大的库...在使用过程中,务必参考官方文档和示例,以便充分利用其功能,并确保与项目需求的匹配度。
同时,它也是项目管理、质量控制和后期维护的重要参考依据。 2. 所用工具与技术 在开发过程中,可能会使用到以下工具和技术: - 开发环境:如Eclipse, IntelliJ IDEA等 - 前端框架:React, Vue.js或Angular - 后端...
通过深入剖析“micral_core-1.0.tar.gz”这个压缩包,我们可以了解其内部结构和使用方法,为实际项目开发提供参考。 首先,我们需要明确“micral_core-1.0.tar.gz”是一个标准的源码压缩包,采用tar和gzip两种格式...
"官网内有说明文档"提示用户,项目提供了详细的文档,通常包括安装指南、使用教程、API参考等内容,用户可以在官方文档中找到如何配置、运行以及使用此应用的方法。这表明该项目对新用户的友好程度较高,易于理解和...
"pay-crm-osc刷脸支付系统 v1.0.zip" 是一个包含了源代码和相关文档的压缩包,主要用于展示和实现刷脸支付的技术。这个系统可能是为了解决现代支付场景中对便捷性和安全性需求而设计的。刷脸支付作为新兴的生物识别...
"flash-waimai外卖系统 v1.0.zip"是一个包含源码和相关资源的压缩包,主要用于学习、毕业设计或计算机案例分析。该系统可能是一个完整的外卖订餐平台,允许用户在线浏览餐厅菜单,下单购买,并由配送员将食物送到...
本项目设计文档“20B_基于Scrapy的WebUI开发_项目设计文档v1.0.01”旨在详细介绍一个利用Scrapy框架构建的Web用户界面(WebUI)的开发过程。Scrapy是一个强大的Python爬虫框架,由Scrapy开源项目开发组创建,并由...
12. **文档编写**:系统上线前,需编写用户手册和操作指南,帮助员工了解如何使用系统,同时也需要技术文档供维护人员参考。 13. **测试与调试**:系统开发过程中,单元测试、集成测试和压力测试都是必不可少的环节...
doc : 放置一些文档,供开发人员参考。 sql : MySQL数据库文件,创建好数据库,导入即可 car : 自定义app,主要功能代码 handler : 主要用来实现操作日志 hdcarsystem : 项目的基本配置文件 static : 静态文件...
"OPEN-MALL电商平台 v1.0.zip" 是一个包含源码和相关文档的压缩包,主要用于展示和学习电商系统的开发。这个压缩包可能是为计算机专业学生或者开发者准备的,用于毕业设计论文或作为构建电子商务平台的参考案例。...
6. `docs` 或 `doc` 目录: 可能包含库的文档,如HTML、Markdown或RST格式的用户指南和API参考。 7. `requirements.txt`: 列出该库运行所依赖的其他Python库及其版本。 8. `MANIFEST.in`: 用于指定应包含在最终发行...
"baseAdminV1.0.rar" 是一个压缩包文件,其中包含了一个名为 "baseAdminV1.0" 的后台管理系统的模板。这个模板是专为IT行业中的开发者设计的,目的是为了简化后台模块的开发过程,提高开发效率,减少时间和精力的...