Sqlite3 Python中的DateExpiry

2024-05-18 11:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出如何使用SQLite3语句编写函数,该语句负责提前通知我任何药物的有效期(假设30天)。我做了这样的事,但它不能正常工作

l1top = Label(fr,text="Number of serie:")
l1top.grid(row=0,column=0,padx=20,sticky=E,pady=10)
l2top = Label(fr,text="Name of medicine:")
l2top.grid(row=1,column=0,padx=20,sticky=E,pady=10)
l3top = Label(fr,text="Dose")
l3top.grid(row=3,column=0,padx=20,sticky=E,pady=10)
l4top = Label(fr,text="Type of medicine")
l4top.grid(row=4,column=0,padx=20,sticky=E,pady=10)
l5top = Label(fr,text="Packages:")
l5top.grid(row=5,column=0,padx=20,sticky=E,pady=10)
l5top = Label(fr,text="Bottles:")
l5top.grid(row=6,column=0,padx=20,sticky=E,pady=10)
l6top = Label(fr,text="Expiry Date:")
l6top.grid(row=7,column=0,padx=20,sticky=E,pady=10)
def expiry():
    conn = sqlite3.connect("pharmacy.db")
    cur = conn.cursor()
    cur.execute('SELECT date FROM medicine WHERE date <= 30')
    matched = [rec[0] for rec in cur]
    conn.close()
    items = [row for row in tree.get_children() if tree.item(row, 'values')[6] in matched]
    tree.selection_set(items)
expiry()

上面的代码没有正确选择,因为它只根据天匹配,但不包括小部件DateEntry(下面)中的整个日期。如何重写SQLite语句,即它获取整个日期,并将所有产品与到期日在30天内匹配,并在最后一列([6])上以红色突出显示日期

e6 = DateEntry(fr,width=12,bg="darkblue",fg="white",year=2020,state="readonly",date_pattern="dd/mm/yyyy",textvariable=six)
e6.grid(row=7,column=1,pady=10)

Tags: oftextcolumn语句frconnlabelgrid
1条回答
网友
1楼 · 发布于 2024-05-18 11:05:20

如果列date的格式为DD-MM-YYYY,首先必须将其更改为YYYY-MM-DD,因为这是SQLite的唯一有效格式:

UPDATE medicine 
SET date = SUBSTR(date, -4) || '-' || SUBSTR(date, 4, 2) || '-' || SUBSTR(date, 1, 2);

然后使用函数DATE()获取date介于nownow+30天之间的行:

SELECT date 
FROM medicine 
WHERE date BETWEEN DATE('now') AND DATE('now', '+30 day')

相关问题 更多 >