我試圖弄清楚如何使用 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
提交
取消