我正在嘗試使用 Python/Pandas 查詢資料庫。這將是一個反復出現的請求,我想回顧一個隨時間變化的時間視窗,所以我想在如何做到這一點上運用一些智慧。
在我的 SQLite 查詢中,如果我說
WHERE table.date BETWEEN DATETIME('now', '-6 month') AND DATETIME('now')
我得到了我期望的結果。但是,如果我嘗試將它們移動到變數中,結果表就會變成空的。我發現 endDate 變數有效但 startDate 無效。大概我在撇號周圍的轉義上做錯了什么?由于結果是空的,它就像是在DATETIME(\'now\')看但沒有看到'-6 month'位(比較現在與現在是空的)。有什么想法可以使用 Python 正確地將其傳遞給查詢嗎?
startDate = 'DATETIME(\'now\', \'-6 month\')'
endDate = 'DATETIME(\'now\')'
query = '''
SELECT some stuff
FROM table
WHERE table.date BETWEEN ? AND ?
'''
df = pd.read_sql_query(query, db, params=[startDate, endDate])
uj5u.com熱心網友回復:
您可以嘗試使用如下所示的字串格式,
startDate = "DATETIME('now', '-6 month')"
endDate = "DATETIME('now')"
query = '''
SELECT some stuff
FROM table
WHERE table.date BETWEEN {start_date} AND {end_data}
'''
df = pd.read_sql_query(query.format(start_date=startDate, end_data=endDate), db)
uj5u.com熱心網友回復:
當您向查詢提供引數時,它們被視為文字,而不是 SQL 應評估的運算式。
您可以將函式引數而不是函式作為字串傳遞。
startDate = 'now'
startOffset = '-6 month'
endDate = 'now'
endOffset = ' 0 seconds'
query = '''
SELECT some stuff
FROM table
WHERE table.date BETWEEN DATETIME(?, ?) AND DATETIME(?, ?)
'''
df = pd.read_sql_query(query, db, params=[startDate, startOffset, endDate, endOffset])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385855.html
