共计 1462 个字符,预计需要花费 4 分钟才能阅读完成。
检索对象
要从数据库中检索对象,即数据记录,要通过模型类的 Manager(默认名称是 objects,能够对其重写)构建一个 QuerySet。
一个 QuerySet 代表来自数据库中对象的一个汇合,对应 SQL 的 SELECT 语句,能够通过 filters 来放大范畴,对应 SQL 层面的 WHERE 或 LIMIT 子句。
过滤器有 filter(kwargs) 和 exclude(kwargs),返回的都是 QuerySet 对象,且每一个 QuerySet 对象是惟一的。
其余常见 API
(1)order_by(*fields)
Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
(2)distinct(*fields)
QuerySet 是惰性的,详情见 QuerySet 何时被执行
限度 QuerySet 条目数
利用 python 的数组切片语法,等价于 SQL 的 LIMIT 和 OFFSET 子句。例如 Entry.objects.all()[5:10]
字段查问
字段查问即如何制订 SQL 的 WHERE 子句,以关键字参数传递给 filter/exclude/get。
格局为:field__lookuptype=value
例如
Entry.objects.filter(pub_date__lte='2006-01-01')
等价于
SELECT * FROM blog_entry WHERE pub_date <= '2006-01-01';
常见 lookuptype
参考 QuerySet API 参考
(1)exact(默认)
Entry.objects.filter(pub_date=None)
Entry.objects.filter(pub_date__isnull=True)
(2)iexact– 不辨别大小写
(3)contains– 大小写敏感的蕴含,相似于 LIKE
(4)icontains– 不辨别大小写
(5)startswith/istartswith– 以 xx 开始
(6)endswith/iendswith– 以 xx 完结
(7)in
Entry.objects.filter(id__in=[1, 3, 4])
# SELECT ... WHERE id IN (1, 3, 4);
Entry.objects.filter(headline__in='abc')
# 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%')
(8)gt — 大于;gte — 大于的等于;
(9)lt ; lte;
(10)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';
正文完