假设我有一个包含文章标题、作者和发布日期的表,我检索 7 月 1 日之后发布的所有内容, - 但现在我想迭代的不是单独的文章标题,而是通过每天发布的所有文章的集合,构建此列表的最佳且最Pythonic 的方法是什么。可以在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)
组成并且您在 SQL 中按照 pub_date 的升序对数据进行排序。
使用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
验证这是否如您所愿。
关于python - 在 SQLite 或 Python 中聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24696351/