我试图弄清楚如何使用 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)
1 回答

aluckdog
TA贡献1847条经验 获得超7个赞
如果列的格式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从现在到现在 + 30 天之间的行:
SELECT date
FROM medicine
WHERE date BETWEEN DATE('now') AND DATE('now', '+30 day')
添加回答
举报
0/150
提交
取消