`
nswish
  • 浏览: 108460 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Django 1.3 字段查找参考(field lookup reference)

阅读更多

0. 字段查找是什么

所谓字段查找就是Django为了实现SQL语句中诸如 > < LIKE IN 这类关键词,而提供用户的一种接口方式。可用于filter, exclude,get等函数中。

 

书写方式: 在字段名称后加上2个下划线 再加上查找类型关键字 就能形成丰富多样的查找方式。

 

所有内容均摘自Django官方网站的教程。

参考原文地址: http://docs.djangoproject.com/en/1.3/ref/models/querysets/#field-lookups


1. exact 精确匹配查找

样例:

Entry.objects.get(id__exact=14)

Entry.objects.get(id__exact=None)

等价的SQL语句:

SELECT ... WHERE id = 14;

SELECT ... WHERE id IS NULL;

 

exact是大小写相关的,如果需要忽略大小写,那么使用iexact即可。前缀 i 即 ignore。


2. contains 包含查找

样例:

Entry.objects.get(headline__contains='Lennon')

等价的SQL语句:

SELECT ... WHERE headline LIKE '%Lennon%';

 

contains也是大小写相关,如果需要忽略大小写,那么如同exact的方式,在contains前加 i 前缀,即icontains


3. in 在列表中查找

样例:

Entry.objects.filter(id__in=[1, 3, 4])

等价的SQL语句:

SELECT ... WHERE id IN (1, 3, 4);

我们也可以用一个查询集(queryset)以动态求值的方式得到一个列表,来代替以上字面方式的列表。

inner_qs = Blog.objects.filter(name__contains='Cheddar')
entries = Entry.objects.filter(blog__in=inner_qs)

等价于:

SELECT ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE '%Cheddar%')

 

Django处理in查找是通过SQL本身的子查询语法来完成的。但从性能上考虑,某些数据库尤其是MySQL,对子查询支持的不是那么好。将嵌有一个子查询的查询分成2个查询来做,很多时候,效率要好一些。如下:

values = Blog.objects.filter(name__contains='Cheddar').values_list('pk', flat=True)
entries = Entry.objects.filter(blog__in=list(values))


4. gt gte lt lte 比较大小等于

● gt = great than 大于

样例:

Entry.objects.filter(id__gt=4)

等价的SQL语句:

SELECT ... WHERE id > 4;

 

● gte = great than or equal to 大等于

 

● lt = less than 小于

 

● lte = less than or equal to 小等于


5. startswith 以...开始查找

样例:

Entry.objects.filter(headline__startswith='Will')

等价的SQL语句:

SELECT ... WHERE headline LIKE 'Will%';

 

如果需要忽略大小写,那么使用istartswith.


6. endswith 以...结尾查找

样例:

Entry.objects.filter(headline__endswith='cats')

等价的SQL语句:

SELECT ... WHERE headline LIKE '%cats';

 

如果需要忽略大小写,那么使用iendswith.


7. range 范围查找

样例:

start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))

等价的SQL语句:

SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';

在SQL中任何可以使用BETWEEN的地方,等价地使用range,类型范围包括:日期、数字、字符


8. year 按年查找  month 按月查找  day 按日查找

样例:

Entry.objects.filter(pub_date__year=2005)

等价的SQL语句:

SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31 23:59:59.999999';

注: 对不同的数据库,Django等价实现的SQL语句也会有所不同

 

对于month和day关键字,Django也有等价的SQL语句转换。


9. week_day 按星期几查找

如果要查询星期二的数据,可以如下

样例:

Entry.objects.filter(pub_date__week_day=2)

 

10. isnull 是否为空查找

样例:

Entry.objects.filter(pub_date__isnull=True)

等价的SQL语句:

SELECT ... WHERE pub_date IS NULL;


11. search 和 regex

暂空。


0
3
分享到:
评论

相关推荐

    django 1.3 docs

    1. **模型(Models)**:在 Django 1.3 中,模型类继承自`django.db.models.Model`,通过定义字段(如CharField、IntegerField等)来描述数据库表结构。每个模型类都会自动生成一个管理器(Manager),默认的管理器...

    django1.3官方文档英文html版

    Django 1.3是该框架的一个早期版本,尽管现在已经有了更新的版本,但对于学习Django的基本概念和工作原理,1.3版的文档仍然具有很高的参考价值。 这个文档集合是由Django 1.3的官方文档英文版编译而来的HTML版本,...

    django 1.3 官方手册

    - **API 参考文档**:提供了 Django 各个模块的详细 API 文档,包括模型字段、模型方法、表单字段、表单方法、视图函数、模板标签等。这部分内容是开发者深入理解 Django 内部工作原理的重要参考资料。 综上所述,...

    django 1.3 离线文档

    ### Django 1.3离线文档知识点概览 #### 一、获取帮助 ...以上是对Django 1.3离线文档的主要知识点的概述,这些内容涵盖了从入门到进阶的各个层面,对于学习和使用Django框架有着重要的参考价值。

    Django1.3文档英文版_chm

    Django1.3英文英文版文档,整理成了CHM,方便携带和阅读,支持索引和搜索.

    python2.7.3+django1.3+pydev

    Python 2.7.3、Django 1.3 和 PyDev 是开发 Web 应用程序的必备组件,尤其对于初学者和经验丰富的开发者来说,它们都是构建高效、可扩展和可靠的系统的基石。以下是关于这些组件的详细知识: **Python 2.7.3** ...

    Python-Django模型字段加密解密您的数据并加密保存至数据库中

    本文将深入探讨如何在Django中实现模型字段的加密和解密,以及如何利用luojilab-django-mirage-field-5d96836这样的库来简化这个过程。 首先,理解Django模型字段。在Django中,模型是数据库表的面向对象表示。每个...

    django documentation 1.3部分汉化

    《Django 1.3 文档部分汉化详解》 Django 1.3 是一个历史悠久但仍然有价值的版本,它是Python开发的Web框架Django的一个关键迭代。这个文档的汉化工作旨在帮助中文用户更好地理解和应用Django 1.3,尽管后续版本...

    Django-1.3.tar.gz

    Django 1.3是这个框架的一个早期版本,虽然现在已经有了更现代的版本,但对于学习历史版本或者对特定环境有需求的开发者来说,这个资源包依然有价值。 1. **Django框架介绍** Django遵循模型-模板-视图(MTV)架构...

    django-docs-1.3-en.rar

    在1.3版本中,模型类定义了字段、关系和其他元数据,Django自动为这些模型生成SQL,简化了数据库操作。 4. **视图(View)** 视图是处理请求并返回响应的函数或类。它们通常根据URL路由调用,负责获取数据、处理...

    PyPI 官网下载 | django-validated-jsonfield-1.0.8.tar.gz

    《PyPI官网下载:django-validated-jsonfield-1.0.8.tar.gz——Django项目的JSON字段验证增强》 在Python的世界里,Django作为一款强大的Web开发框架,以其高效、灵活和可扩展性赢得了广大开发者的心。在Django的...

    Python库 | django_validated_jsonfield-1.1.7-py3-none-any.whl

    `django_validated_jsonfield` 是一个专门为Python的Django框架设计的第三方库,它扩展了Django模型的字段类型,提供了对JSON数据的有效验证和序列化功能。在Django项目中,原始的`JSONField`虽然能存储JSON格式的...

    django-1.3-cheetsheet

    ### Django 1.3 Cheat Sheet 知识点详解 #### 一、查询操作(Lookups) 在Django中,查询操作是与数据库交互的核心部分。下面列出了一些常用的查询操作符。 1. **`exact`, `iexact`**:用于精确匹配,其中`iexact...

    PyPI 官网下载 | django-phonenumber-field-0.5.tar.gz

    "django-phonenumber-field-0.5.tar.gz"是一个压缩包文件,表明它包含了名为"django-phonenumber-field"的Python库的0.5版本。描述进一步确认了该资源来源于PyPI,并且文件格式为tar.gz,这是一种常见的源代码打包...

    django-fernet-fields, Django 模型字段的Fernet对称加密.zip

    django-fernet-fields, Django 模型字段的Fernet对称加密 django-fernet-fields Fernet 用于 Django 模型字段的对称加密,使用库。在 python 。3.3 。3.4.3.5.3.6.pypy和pypy3上,django-fernet-fiel

    Django_1.3_en.CHM

    由官方 Django_1.3_doc_html_en 编译而来

    Python库 | django_phonenumber_field-1.1.0-py2.py3-none-any.whl

    `django_phonenumber_field`库还包含了与之配套的表单字段和模板标签,帮助开发者在前端展示和验证电话号码输入。它集成了`phonenumbers`库,这是一个强大的电话号码处理库,可以进行合法性验证、格式化以及本地化...

    django-ratings, 在 Django 中,可以插入的分级字段.zip

    django-ratings, 在 Django 中,可以插入的分级字段 ratings这个项目的不再维持一般分级 MODULE 字段本身在模型上附加两个附加字段,以优化原因。 它添加了 &lt;field&gt;_score 和 &lt;field&gt;_votes 字段,它们都是整型字段...

    PyPI 官网下载 | django-json-field-0.4.1.tar.gz

    `django-json-field`库解决了这个问题,它提供了一个自定义字段类型,使你能直接将JSON对象存储在数据库中,无需进行额外的序列化和反序列化操作。 在`django-json-field-0.4.1.tar.gz`这个压缩包中,我们可以期待...

Global site tag (gtag.js) - Google Analytics