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
暂空。
分享到:
相关推荐
django 1.3 离线文档 pdf
根据django1.3的doc编译。与django1.3官方文档完全一致,免除在线文档受网速控制的困扰。
Django1.3英文英文版文档,整理成了CHM,方便携带和阅读,支持索引和搜索.
1.3版本django帮助文档,1.3版本django帮助文档,1.3版本django帮助文档,1.3版本django帮助文档,
从官方下载的django手册,真正的1.3版本,英文原文,完整,有索引
python2.7.3 + django1.3 + pydev 64位和32位都有
NULL 博文链接:https://simoncook.iteye.com/blog/1231943
Django模型字段加密/解密您的数据,并加密保存至数据库中
django-1.3 cheetsheet 打印出来速查 很方便....居家旅行必备...
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 documentation 1.3部分汉化,网页截图
由官方 Django_1.3_doc_html_en 编译而来
django-ratings, 在 Django 中,可以插入的分级字段 ratings这个项目的不再维持一般分级 MODULE 字段本身在模型上附加两个附加字段,以优化原因。 它添加了 <field>_score 和 <field>_votes 字段,它们都是整型字段...
一个 Django 1.3+ 标签,用于将 JavaScript 排除在模板之外。 $ pip install jsinclude 使用示例: <!-- template.html --> {% load jsinclude %} {% with 31 as age %} {% jsinclude widgets/profile.js ...
Django的Field类中方法有: to_python() # 把数据库数据转成python数据 from_db_value() # 把数据库数据转成python数据 get_pre_value() # 把python数据压缩准备存入数据库 get_db_pre_value() # 把压缩好的数据转成...
简介:一个Django应用程序,为pytz时区对象提供数据库和表单字段。 当前构建状态 所有平台: 当前发行信息 姓名 资料下载 版本 平台类 安装django-timezone-field 从conda-forge通道安装django-timezone-field可以...
主要介绍了django 模型字段设置默认值代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了Django Model中字段(field)的各种选项说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
django docs 1.3 english
django-phonenumber-field 一个与交互的Django库,用于验证,打印和转换电话号码。 python-phonenumbers是Google的库的端口,该库可为Android的电话号码处理提供支持。 包括: PhoneNumber ,围绕python-phone...