You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask框架中使用SQLAlchemy查询获取上个月的业务数据

解决方案

1. 依赖准备(可选)

如果需要更简便的相对日期计算,可以先安装python-dateutil库,用于快速计算上月日期范围:

pip install python-dateutil

如果不想额外安装依赖,也可以使用Python原生datetime模块实现,下文会给出两种实现方案。

2. 路由代码修改

只需要替换原路由中的数据查询逻辑即可,前端模板不需要额外调整,因为传递给模板的变量名仍然是buys,原有渲染逻辑可以直接复用:

用python-dateutil实现(更简洁)

from datetime import datetime
from dateutil.relativedelta import relativedelta

@app.route('/')
@register_breadcrumb(app, '.', 'Home')
def home():
    # 计算上月时间边界
    today = datetime.today()
    # 上个月第一天 00:00:00
    first_day_of_last_month = (today - relativedelta(months=1)).replace(day=1, hour=0, minute=0, second=0, microsecond=0)
    # 本月第一天 00:00:00,作为上月的结束边界
    first_day_of_current_month = today.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
    # 筛选区间为[上月第一天, 本月第一天)的所有数据
    buys = Buy.query.filter(Buy.date >= first_day_of_last_month, Buy.date < first_day_of_current_month).all()
    return render_template('home.html', buys=buys, title='home page')

用原生datetime实现(无额外依赖)

from datetime import datetime, timedelta

@app.route('/')
@register_breadcrumb(app, '.', 'Home')
def home():
    today = datetime.today()
    # 计算上月最后一天
    last_day_of_last_month = today.replace(day=1) - timedelta(days=1)
    # 上月第一天 00:00:00
    first_day_of_last_month = last_day_of_last_month.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
    # 本月第一天作为结束边界
    first_day_of_current_month = today.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
    buys = Buy.query.filter(Buy.date >= first_day_of_last_month, Buy.date < first_day_of_current_month).all()
    return render_template('home.html', buys=buys, title='home page')

3. 注意事项

  • 如果项目有时区配置要求,不要直接使用datetime.today(),替换为对应时区的时间生成方法,避免时差导致的筛选错误
  • 这里采用左闭右开的区间筛选逻辑,避免漏掉上月最后一天23:59:59到本月第一天0点之间的毫秒级数据,比计算上月最后一天的23:59:59的方案更严谨
  • Buy模型的date字段本身就是DateTime类型,不需要额外做类型转换,SQLAlchemy会自动完成和数据库字段的匹配

内容的提问来源于stack exchange,提问作者sendous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:48:02