假设我有一个包含文章标题,作者和发布日期的表,我检索了7月1日之后发布的所有文章,但现在我不想遍历所有文章标题而不是逐一遍历每天发表的文章,构建此列表的最佳方式和最佳方式是什么。可以在sqlite查询中完成吗?
编辑:我实际上没有在sqlite3中有文章的表格,但让我们假设我有。并假设该表articles
的组织方式为:
title TEXT, author TEXT, publisher TEXT, date DATETIME
文章可以这样获取:
cursor.execute("SELECT * FROM articles where date > ?", \
(datetime.datetime(2014, 07, 01),))
并可以按(按照以下Holdenweb的答案)分组:
itertools.groupby(cursor.fetchall(),lambda x:datetime.strptime(x [3],'%Y-%m-%d%H:%M:%S.%f')。day)
这将给出一个元组(天,组),并且可以按以下描述的方式进行迭代。
通常,SQL查询将仅返回一组行。
假设您已经检索了游标中想要的所有行curs
,并假设结果行各由组成,(header, author, pub_date)
并且您已按pub_date的升序对SQL中的数据进行了排序。
使用itertools.groupby()
它很容易定义一个返回pub_date列的键函数(lambda r: r[2]
请注意)。然后,您可以遍历groupby()
结果,该结果是一系列(key_value, group)
元组,其中key_value
将采用列的连续唯一值,pub_date
并且group
将成为迭代器,产生与该键值关联的连续行。尝试类似的东西
for key_val, group in itertools.groupby(curs.fetchall(), lambda r: r[2]):
print key_val
for item in group:
print "\t", item
验证是否可以按需工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句