Django 获取数据库指定范围的数据
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别
1、检索所有的对象
[code]>>> all_entries = Entry.objects.all()
使用all()方法返回数据库中的所有对象。
2、检索特定的对象
使用以下两个方法:
[code]fileter(**kwargs)
返回一个与参数匹配的QuerySet,相当于等于(=).
[code]exclude(**kwargs)
返回一个与参数不匹配的QuerySet,相当于不等于(!=)。
[code]Entry.objects.filter(pub_date__year=2006)
- 不使用Entry.objects.all().filter(pub_date__year=2006),虽然也能运行,all()最好再获取所有的对象时使用。
上面的例子等同于的sql语句:
[code]select * from entry where pub_date_year=’2006′
链接过滤器:
[code]>>> Entry.objects.filter( … headline__startswith=’What’ … ).exclude( … pub_date__gte=datetime.now() … ).filter( … pub_date__gte=datetime(2005, 1, 1) … )
最后返回的QuerySet是headline like ‘What%’ and put_date2005-01-01
另外一种方法:
[code]>> q1 = Entry.objects.filter(headline__startswith=”What”) >> q2 = q1.exclude(pub_date__gte=datetime.now()) >> q3 = q1.filter(pub_date__gte=datetime.now())
这种方法的好处是可以对q1进行重用。
QuerySet是延迟加载
只在使用的时候才会去访问数据库,如下:
[code]>>> q = Entry.objects.filter(headline__startswith=”What”) >>> q = q.filter(pub_date__lte=datetime.now()) >>> q = q.exclude(body_text__icontains=”food”) >>> print q
在print q时才会访问数据库。
其他的QuerySet方法
[code]>>> Entry.objects.all()[:5]
这是查找前5个entry表里的数据
[code]>>> Entry.objects.all()[5:10]
这是查找从第5个到第10个之间的数据。
[code]>>> Entry.objects.all()[:10:2]
这是查询从第0个开始到第10个,步长为2的数据。
[code]>>> Entry.objects.order_by(‘headline’)[0]
这是取按headline字段排序后的第一个对象。
[code]>>> Entry.objects.order_by(‘headline’)[0:1].get()
这和上面的等同的。
[code]>>> Entry.objects.filter(pub_date__lte=’2006-01-01′)
等同于SELECT * FROM blog_entry WHERE pub_date <= ’2006-01-01′;
[code] >>> Entry.objects.get(headline__exact=”Man bites dog”)
等同于SELECT … WHERE headline = ‘Man bites dog’;
[code]>>> Blog.objects.get(id__exact=14) # Explicit form >>> Blog.objects.get(id=14) # __exact is implied
这两种方式是等同的,都是查找id=14的对象。
[code]>>> Blog.objects.get(name__iexact=”beatles blog”)
- 查找name=”beatles blog”的对象,不去饭大小写。
[code]Entry.objects.get(headline__contains=’Lennon’)
等同于SELECT … WHERE headline LIKE ‘%Lennon%’;
startswith 等同于sql语句中的 name like ‘Lennon%’,
endswith等同于sql语句中的 name like ‘%Lennon’.
[code]>>> Entry.objects.filter(blog__name__exact=’Beatles Blog’)
查找entry表中外键关系blog_name=’Beatles Blog’的Entry对象。
[code]>>> Blog.objects.filter(entry__headline__contains=’Lennon’)
查找blog表中外键关系entry表中的headline字段中包含Lennon的blog数据。
[code]Blog.objects.filter(entry__author__name=’Lennon’)
查找blog表中外键关系entry表中的author字段中包含Lennon的blog数据。
[code]Blog.objects.filter(entry__author__name__isnull=True) Blog.objects.filter(entry__author__isnull=False,entry__author__name__isnull=True)
查询的是author_name为null的值
[code]Blog.objects.filter(entry__headline__contains=’Lennon’,entry__pub_date__year=2008) Blog.objects.filter(entry__headline__contains=’Lennon’).filter( entry__pub_date__year=2008)
这两种查询在某些情况下是相同的,某些情况下是不同的。第一种是限制所有的blog数据的,而第二种情况则是第一个filter是
限制blog的,而第二个filter则是限制entry的
[code]>>> Blog.objects.get(id__exact=14) # Explicit form >>> Blog.objects.get(id=14) # __exact is implied >>> Blog.objects.get(pk=14) # pk implies id__exact
等同于select * from where id=14
Get blogs entries with id 1, 4 and 7
[code]>>> Blog.objects.filter(pk__in=[1,4,7])
等同于select * from where id in{1,4,7}
Get all blog entries with id > 14
Blog.objects.filter(pk__gt=14)
等同于select * from id>14
[code]>>> Entry.objects.filter(blog__id__exact=3) # Explicit form >>> Entry.objects.filter(blog__id=3) # __exact is implied >>> Entry.objects.filter(blog__pk=3) # __pk implies __id__exact
这三种情况是相同的
Entry.objects.filter(headline__contains=’%’)
等同于SELECT … WHERE headline LIKE ‘%\%%’;
Caching and QuerySets
print [e.headline for e in Entry.objects.all()]
print [e.pub_date for e in Entry.objects.all()]
应改写为:
[code]>> queryset = Poll.objects.all() >>> print [p.headline for p in queryset] # Evaluate the query set. >>> print [p.pub_date for p in queryset] # Re-use the cache from the evaluation.、
这样利用缓存,减少访问数据库的次数。
四、用Q对象实现复杂的查询
Q(question__startswith=’Who’) | Q(question__startswith=’What’)
等同于WHERE question LIKE ‘Who%’ OR question LIKE ‘What%’
Poll.objects.get(
Q(question__startswith=’Who’),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
等同于SELECT * from polls WHERE question LIKE ‘Who%’ AND (pub_date = ’2005-05-02′ OR pub_date = ’2005-05-06′)
[code]Poll.objects.get( Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)), question__startswith=’Who’)
等同于
[code]Poll.objects.get(question__startswith=’Who’, Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))
原文:https://blog.csdn.net/vic_torsun/article/details/69791170
阅读更多- GDAL获取指定地理坐标像元值、获取指定地理范围影像数据
- 数据库查询:查询在指定时间范围内的数据
- django获取指定列的数据
- Django Model获取指定列的数据
- 获取数据库指定范围行的sql语句和存储过程
- bboss taglib直接指定数据库sql语句获取数据
- 获取指定数据库表, 以及指定表的数据信息
- sql获取指定时间范围数据
- django数据查询指定数据库
- Django 中随机获取指定数量数据
- C#操作数据库获取指定列数据类型为int的值
- django获取指定列的数据
- 从数据库中返回的数据结果中获取指定数据
- 获取指定行号(范围)的行的数据
- VB.net 查询获取数据库数据信息
- 将从数据库导出的数据以excel的附件形势发送到指定邮箱
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现
- 使用JDBC获取数据库数据,并生成json格式文件(省市区三级联动)
- 怎么在jsp页面中获取数据库数据
- django1.6.11 html文件获取session数据