首页 > 解决方案 > Sqlite3 Python中的DateExpiry

问题描述

我试图弄清楚如何使用 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(below) 中的整个日期。如何重写 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)

标签: pythonsqlitedatetkinter

解决方案


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

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

然后使用该函数DATE()获取从现在现在 + 30 天date之间的行:

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

推荐阅读