首页 > 解决方案 > 我需要一个 for 循环,它可以为我提供 2 个日期之间的日期

问题描述

我需要一个for循环,为我的 sqlite3 查询提供当前日期和 7 天前之间的日期和月份值。例如 for day in range(7DaysAgo, Today):

或者如果有更好的方法从数据库中获取过去 7 天的数据,将不胜感激。

这是我拥有的 31 天,但如果有意义的话,我需要它是从当前日期开始的 31 天,而不是每个月的 31 天。我在 matplotlib 图上绘制数据。

def animate(i=1):
        var.set((time.strftime("%H:%M")))
        Fig_plot.clear()
        xList_30Day = []
        yList_30Day = []
        
        for DAY in range(31):
            Total_Day = 0
            c.execute('SELECT Day, Month, Bank FROM CRJ WHERE Month=? AND Day=?',(time.strftime("%m"),DAY))
            for row in c.fetchall():
##                print(row)
                Total_Day += row[2]
            xList_30Day.append(DAY)
            yList_30Day.append(Total_Day)
        Fig_plot.plot(xList_30Day,yList_30Day)

数据库列的

CREATE TABLE "CRJ" ( "ID" REAL, "Day" INTEGER, "Month" INTEGER, "Year" INTEGER, "Time" INTEGER, "Description" TEXT, "Amount" RAEL, "Bank" RAEL, "Item" TEXT , "QTY" TEXT, "Payment_Type" TEXT, "Cashier" TEXT );

标签: python-3.xsqlite

解决方案


当然,如果你真的想要一个在 python 中给出一个日期之间的循环,你可能会得到它:

from datetime import date as dt, timedelta
today = dt.today()
date = today - timedelta(days=31)
step = timedelta(days=1)

for i in range(31):
    date += step
    ...
    c.execute('SELECT Year, Day, Month, Bank FROM CRJ WHERE Year=?, Month=? AND Day=?',(date.year, date.month, date.day))
    ...

只是,对我来说,执行 31 个查询似乎不是一个好主意,如果有可能获得相同的查询。


推荐阅读