标签:md QuerySet pub datetime filter csdn Entry date export
Django执行查询序
**all()**方法返回的结果集中包含全部对象,但是更普遍的情况是你需要获取完整集合的一个子集。
要创建这样一个子集,需要精炼上面的结果集,增加一些过滤器作为条件。两个最普遍的途径是:
filter(**kwargs) 返回一个包含对象的集合,它们满足参数中所给的条件。
exclude(kwargs) 返回一个包含对象的集合,它们*不***满足参数中所给的条件。
查询参数(上面函数定义中的****kwargs**)需要满足特定的格式,字段检索一节中会提到。
举个例子,要获取年份为2006的所有文章的结果集,可以这样使用**filter()**方法:
Entry.objects.filter(pub_date_year==2010)
在默认的管理器类中,它相当于:
Entry.objects.all().filter(pub_date_year==2010)
链式过滤
QuerySet的精炼结果还是QuerySet,所以你可以把精炼用的语句组合到一起,像这样:
Entry.object.filter(
headline_startswitch=‘What'
).exclude(
pub_date_gte=datetime.date.today()
).filter(
pub_date_gte=datetime(2010,1,30)
)
最开始的QuerySet包含数据库中的所有对象,之后增加一个过滤器去掉一部分,在之后又是另外一个过滤器。最后的结果的一个QuerySet,包含所有标题以”word“开头的记录,并且日期是2010年一月,日为当天的值。
过滤后的结果集是独立的
每次你筛选一个结果集,得到的都是全新的另一个结果集,它和之前的结果集之间没有任何绑定关系。每次筛选都会创建一个独立的结果集,可以被存储及反复使用。
q1=Entry.object.filter(headline_startwith='what')
q2=q1.exclude(pub_date_gte=datetime.date.today()
q3=q1.filter(pub_date_gte=datetime.date.today())
这三个 QuerySets 是不同的。 第一个 QuerySet 包含大标题以"What"开头的所有记录。第二个则是第一个的子集,用一个附加的条件排除了出版日期 pub_date 是今天的记录。 第三个也是第一个的子集,它只保留出版日期 pub_date 是今天的记录。 最初的 QuerySet (q1) 没有受到筛选的影响。
查询集是延迟的
QuerySets 是惰性的 – 创建 QuerySet 的动作不涉及任何数据库操作。你可以一直添加过滤器,在这个过程中,Django 不会执行任何数据库查询,除非 QuerySet 被执行. 看看下面这个例子:
q=Entry.object.filter(headline_startwith='what')
q=q.filter(pub_date_lte=datetime.now())
q=q.exclude(body_text_contains="foods")
print q
QuerySets 是惰性的 – 创建 QuerySet 的动作不涉及任何数据库操作。你可以一直添加过滤器,在这个过程中,Django 不会执行任何数据库查询,除非 QuerySet 被执行. 看看下面这个例子:
标签:md,QuerySet,pub,datetime,filter,csdn,Entry,date,export 来源: https://blog.csdn.net/niuxuerui11/article/details/104826291
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。