Django Field lookups (字段查找)
字段查找是指定SQL WHERE子句的核心内容的方式。
它们被指定为QuerySet方法filter()、exclude()和get()的关键字参数。
1、exact:精确查找。如果为比较提供的值为None,则会将其解释为SQL NULL
在MySQL中,数据库表的“排序”设置决定了精确的比较是否区分大小写。这是一个数据库设置,而不是Django设置。
可以将MySQL表配置为使用区分大小写的比较。
Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None)
SELECT ... WHERE id = 14;
SELECT ... WHERE id IS NULL;
2、iexact:不区分大小写的精确查找
Blog.objects.get(name__iexact='beatles blog')
Blog.objects.get(name__iexact=None)
SELECT ... WHERE name ILIKE 'beatles blog';
SELECT ... WHERE name IS NULL;
3、contains:包含,模糊查询
Entry.objects.get(headline__contains='Lennon')
SELECT ... WHERE headline LIKE '%Lennon%';
4、icontains:包含,不区分大小写
Entry.objects.get(headline__icontains='Lennon')
SELECT ... WHERE headline ILIKE '%Lennon%';
5、in:范围查询
Entry.objects.filter(id__in=[1, 3, 4])
Entry.objects.filter(headline__in='abc')
SELECT ... WHERE id IN (1, 3, 4);
SELECT ... WHERE headline IN ('a', 'b', 'c');
也可以判定结果集,子查询
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%')
如果将由values()或values_list()生成的QuerySet作为值传递给__in查找,则需要确保只提取结果中的一个字段。
inner_qs = Blog.objects.filter(name__contains='Ch').values('name')
entries = Entry.objects.filter(blog__name__in=inner_qs)
6、gt:大于;
gte:大于等于
lt:小于
lte:小于等于
Entry.objects.filter(id__gt=4) SELECT ... WHERE id > 4;
7、startswith:区分大小写的开始。
istartswith:不区分大小写
Entry.objects.filter(headline__startswith='Lennon')
SELECT ... WHERE headline LIKE 'Lennon%';
Entry.objects.filter(headline__istartswith='Lennon')
SELECT ... WHERE headline ILIKE 'Lennon%';
8、endswith:区分大小写结尾
iendswith:不区分大小写
Entry.objects.filter(headline__endswith='Lennon')
SELECT ... WHERE headline LIKE '%Lennon'; Entry.objects.filter(headline__iendswith='Lennon')
SELECT ... WHERE headline ILIKE '%Lennon'
9、range:范围
在SQL中,您可以在任何地方使用range——日期、数字甚至字符。
import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date)) SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';
10、date,year,month,day,weak
Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__year__gte=2005) SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31';
SELECT ... WHERE pub_date >= '2005-01-01';
Entry.objects.filter(pub_date__month=12)
Entry.objects.filter(pub_date__month__gte=6)
SELECT ... WHERE EXTRACT('month' FROM pub_date) = '12';
SELECT ... WHERE EXTRACT('month' FROM pub_date) >= '6';
11、weekday:取一个整数值,表示从1(星期日)到7(星期六)的星期几。
Entry.objects.filter(pub_date__week_day=2)
Entry.objects.filter(pub_date__week_day__gte=2)
12、quarter:季度。对于日期和日期时间字段,匹配一个“季度”。允许链接额外的字段查找。取1到4之间的整数值,表示该年度的季度。
Entry.objects.filter(pub_date__quarter=2)
13、time:时间
Entry.objects.filter(pub_date__time=datetime.time(14, 30))
Entry.objects.filter(pub_date__time__range=(datetime.time(8), datetime.time(17)))
14、hour:小时。对于日期时间和时间字段,一个精确的小时匹配。允许链接额外的字段查找。取0到23之间的整数。
minute:分钟。0-59
second:秒。0-59
Event.objects.filter(timestamp__hour=23)
Event.objects.filter(time__hour=5)
Event.objects.filter(timestamp__hour__gte=12) SELECT ... WHERE EXTRACT('hour' FROM timestamp) = '';
SELECT ... WHERE EXTRACT('hour' FROM time) = '';
SELECT ... WHERE EXTRACT('hour' FROM timestamp) >= '';
15、isnull:是否为空,对应SQL的IS NULL 和IS NOT NULL
Entry.objects.filter(pub_date__isnull=True) SELECT ... WHERE pub_date IS NULL;
16、regex:正则匹配
iregex:不区分大小写的正则表达式
Entry.objects.get(title__iregex=r'^(an?|the) +') SELECT ... WHERE title REGEXP '^(an?|the) +'; -- MySQL
SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'i'); -- Oracle
SELECT ... WHERE title ~* '^(an?|the) +'; -- PostgreSQL
SELECT ... WHERE title REGEXP '(?i)^(an?|the) +'; -- SQLite
Django Field lookups (字段查找)的更多相关文章
- Django--filter()-字段查找(双下划线的使用详解)
Django--filter()-字段查找(双下划线的使用详解) 在了解django中的字段查找的同时,让我们先熟悉一下比较符: 大于--gt-(greater than) 小于--lt-(less ...
- Django笔记&教程 4-2 模型(models)中的Field(字段)
Django 自学笔记兼学习教程第4章第2节--模型(models)中的Field(字段) 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref ...
- Django之ORM字段和字段参数
ORM介绍 ORM概念 ORM由来 ORM的优势 ORM的劣势 ORM总结 Django中的ORM Django项目使用MySQL数据库 Model 快速入门 字段 自定义字段 字段参数 Model ...
- Django ORM常用字段和参数
常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围 ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
- Django的Models字段含义
在model中添加字段的格式一般为: field_name = field_type(**field_options) 一 field options(所有字段共用) 1 null 默认为F ...
- Django ORM 常用字段和参数
Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...
- Django(ORM常用字段)
day68 参考:http://www.cnblogs.com/liwenzhou/p/8688919.html 1. Django ORM常用字段: 1. AutoField ...
- Django基础——ORM字段和字段参数
ORM概念: 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象( 1. 不同的程序员写的SQL水平参差不齐 2. ...
随机推荐
- TP框架中D方法和M方法
D()和M()方法的区别: D和M的区别主要在于 M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现 而D方法必须有创建模型类. 我们可以 ...
- vmware虚拟机提示:无法将Ethernet0连接到虚拟网络vmnet02018-03-07
编辑——虚拟机网络编辑——还原虚拟机网络配置可以解决
- Xshell设置主机名高亮
修改后的效果: 操作步骤: 情况①:如果是Ubuntu或者Debian,按照下面的流程,两步解决: 打开~/.bashrc. 修改参数force_color_prompt=yes去掉前面的注释#. 情 ...
- Mybatis学习笔记11 - 动态sql之trim标签
trim标签体中是整个字符串拼串后的结果.prefix="" 前缀: prefix给拼串后的整个字符串加一个前缀prefixOverrides="" 前缀覆盖: ...
- [转]jQuery AJAX pagination plugin with ASP.NET Server Side
本文转自:http://do-web.com/jpaging/usage How does it work? 1. In order to implement the plugin, you need ...
- AJAX重点知识的心得体会
下面就为大家带来一篇 AJAX重点知识的心得体会.学习还是有点帮助的,给大家做个参考吧. AJAX是什么? 是Asynchronous Javascript And XML的首字母的缩写, 它不是一门 ...
- Oracle同义词、索引、分区
同义词:是现有对象的一个别名 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型 私有同义词只能在其模式内访问,且不能与当前模式的对象同名 公有同义词可被所有的数据库用户 ...
- ANDROID_HOME is not set and "android" command not in your PATH解决
使用nodejs安装cordova后在项目里面添加平台时出现错误: 原因就是没有配环境变量 使用phonegap开发不仅要配JDK环境变量,还要配ADT环境变量,出现这个错误很显示就是没配ADT环境变 ...
- Hibernate系列3-----之修改
只是修改测试类,先看其他的代码的同学,请翻看我的博客Hibernate1,嘿嘿,我就在这不在重写一遍来 @Test public void testhibernate() { updateStuden ...
- 文本框textarea根据输入内容自适应高度 和输入中文和数字换行解决方法
textarea内容可从后台读取或手动输入,常规输入后中文和数字会出现换行问题 <style> #textarea { display: block; margin: 0 auto; ov ...