啦啦啦啦~Django1.96---字段查询

来源:互联网 发布:精通c语言薪水有多少 编辑:程序博客网 时间:2024/05/17 18:17

字段查询

字段查询是指如何指定SQL WHERE 子句的内容。

它们通过查询集方法filter()exclude() 和 get() 的关键字参数指定。

查询的关键字参数的基本形式是field__lookuptype=value(中间是两个下划线)。例如:

>>> Entry.objects.filter(pub_date__lte='2006-01-01')
翻译成SQL(大体)是:

SELECT * FROM blog_entry WHERE pub_date <= '2006-01-01';

查询条件中指定的字段必须是模型字段的名称。

但有一个例外,对于ForeignKey你可以使用字段名加上_id 后缀

在这种情况下,该参数的值应该是外键的原始值。例如:

>>> Entry.objects.filter(blog_id=4)

如果你传递的是一个不合法的参数,查询函数将引发 TypeError

这些数据库API 支持大约二十多种查询的类型

下面是一些你可能用到的常见查询:

exact:“精确”匹配。
例如:
>>> Entry.objects.get(headline__exact="Man bites dog")

将生成下面的SQL:

SELECT ... WHERE headline = 'Man bites dog';

如果你没有提供查询类型 —— 即如果你的关键字参数不包含双下划线 

—— 默认假定查询类型是exact

例如,下面的两条语句相等:

>>> Blog.objects.get(id__exact=14)  # Explicit form>>> Blog.objects.get(id=14)         # __exact is implied

这是为了方便,因为exact 查询是最常见的情况。

iexact:大小写不敏感的匹配。
所以,查询:
>>> Blog.objects.get(name__iexact="beatles blog")

将匹配标题为"Beatles Blog""beatles blog" 甚至"BeAtlES blOG" 的Blog

contains:大小写敏感的包含关系测试。
例如:
Entry.objects.get(headline__contains='Lennon')

大体可以翻译成下面的SQL:

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

注意,这将匹配'Today Lennon honored' 但不能匹配'today lennon honored'

还有一个大小写不敏感的版本,icontains

startswithendswith
分别表示以XXX开头和以XXX结尾。
当然还有大小写不敏感的版本,叫做istartswith 和 iendswith




0 0