首先,我在SQLlite3中有一個表,有兩個欄位CAR (TEXT NOT NULL), checkout (TEXT NOT NULL)
car checkout
紅色 %d%d/%m%m/%Y (for example 2709/2021)
第二,我寫了一個腳本,其結構是當我運行它時,所有當前日期等于或大于結帳的條目都將被洗掉。
第三,在同一個腳本中,用SELECT來檢查該車是否在串列中,并且checkout大于當前日期,從我的可用車中排除。
第一步的代碼片段如下:
try:
con = lite.connect(DB)
with con:
paper=[]
cur=con.cursor()
cur.execute("DELETE FROM CHECK_TABLE WHERE DATE(substr(checkout,7,4)||substr(checkout,4,2)||substr(checkout,1,2))<=DATE(strftime('%Y%m%d', date('now') )")
con.commit()
print('洗掉舊日期的條目。')
except lite.Error as e:
print('Error connection: '/span>,e)
問題是這不是在洗掉任何東西。奇怪的行為是,首先,SQL查詢在DB瀏覽器中是有效的。 圖片。在Windows 10中證明DB瀏覽器 - Python2.7 - SQLite3 第二個奇怪的行為是,沒有出現錯誤,第三個奇怪的行為是,我兩天前測驗過,它作業正常!我真的需要你的想法。
同樣的邏輯出現在下面的代碼片段中,這是我在上面描述的第三步,使用SELECT命令。
def ReadDateAndCar(car)。
try:
con = lite.connect(DB)
with con:
paper=[]
cur=con.cursor()
cur.execute("SELECT DISTINCT car FROM CHECK_TABLE WHERE car='"/span> car "' AND DATE(substr(checkout,7,4)|substr(checkout,4,2)|substr(checkout,1,2))<=DATE(strftime('%Y%m%d',date('now')) )")
free_cars=cur.fetchall()
return free_cars
except lite.Error as e:
print('Error connection: ',e)
return 0
完全相同的問題。SQL查詢作業正常,沒有出現python錯誤,幾天前還能作業。誰能給我指點迷津?
uj5u.com熱心網友回復:
你的兩個查詢都是錯誤的,而且它們在DB瀏覽器中也不起作用。
你應該做的是用ISO格式YYYY-MM-DD來存盤日期,因為這是唯一與SQLite的datetime函式(如date()和strftime())兼容的文本日期格式,而且它具有可比性。
如果你使用任何其他格式,這些函式的結果是null,這就是你的情況。
運算式substr(checkout,7,4)||substr(checkout,4,2)||substr(checkout,1,2)和strftime('%Y%m%d', date('now'))回傳格式為YYYYMMDD的日期,如果你在date()或strftime()中使用它們,結果是null。
因為你在不等式的兩邊都得到了格式為YYYYMMDD的日期,所以它們是直接可比的,你不應該使用函式date()。
條件應該是:
substr(checkout, -4) || substr(checkout, 4, 2) || substr(checkout, 1, 2) <= strftime('%y%m%d', 'now')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/309328.html
標籤:
上一篇:子行程不在變數中存盤輸出
