这个方法要使用extract函数,这个函数可以从datetime字段中分解出年月。不过在flask_sqlalchemy中没有extract,所以只能从sqlalchemy包导入。
from sqlalchemy import extract
# 获取12月份的所有数据
historys = Search.query.filter(extract('month', Search.created_at) == 12).all()
但是用上面的查询会把往年的12月也查询出来,那么就加上年份的查询
from sqlalchemy import extract, and_
# 获取2020年12月份的数据
historys = Search.query.filter(and_(
extract('year', Search.created_at) == 2020,
extract('month', Search.created_at) == 12
).all()
经过修改可以获取某年的每月的数据总数,我觉得这个办法不是最好的,但是目前没找到更合适的,希望有好办法的同学可以评论告知一下哈!!!
from sqlalchemy import extract, and_, func
# 获取2020年的所有数据
historys = db.query(Search).filter(and_(extract('year', Search.created_at) == 2020,extract('month', Search.created_at).in_([1,2,3,4,5,6,7,8,9,10,11,12]))).all()
historys = db.query(Search).filter(and_(extract('year', Search.created_at) == 2020)).all()
# 获取具体每月的所有数据
mouths = [1,2,3,4,5,6,7,8,9,10,11,12]
for i in mouths:
t = db.query(func.count(Search.id)).filter(and_(extract('year', Search.created_at) == 2020,extract('month', Search.created_at) == i)).all()
y = db.query(func.count(VideoIds.id)).filter(and_(extract('year', VideoIds.vdate) == 2020,extract('month', VideoIds.vdate) == i)).all()
f = db.query(func.count(FaceArticle.id)).filter(and_(extract('year', FaceArticle.time) == 2020,extract('month', FaceArticle.time) == i)).all()