2011-08-01 97 views
1

我在MySQL終端中使用以下sql,它工作正常。Mysql INTERVAL sql語句問題

select * from metric_measured_value where metric_id=18 and measurement_time>(now()-INTERVAL 2 year); 

但是,當我在python代碼中使用它時,它不起作用。

res = self._db.Query("""SELECT * FROM metric_measured_value 
              WHERE metric_id = %s 
              AND measurement_time>(now()-%s)""", 
              (metric_id, max_interval)) 

這裏metric_id = 18和max_interval = 「間隔2年」

的錯誤信息是: 截斷不正確DOUBLE值:'間隔2今年

我在做什麼錯?

感謝您的幫助。

回答

2

這可能是您的數據庫訪問庫使用準備好的語句。 INTERVAL是一個MySQL關鍵字,它不會被傳遞到預準備語句中。

+0

謝謝。那就是問題所在。有沒有辦法避免這種情況? –

+0

亞當所說的可能是最好的方法。 – Mchl

1

而不是計算數據庫上的時間間隔,爲什麼不在python中做,並將其傳遞到您的測量時間。

from datetime import date 
max_interval = 2 
today = date.today() 
interval = date.today() 
interval = interval.replace(year=interval.year - max_interval) 
delta = today - interval 

res = self._db.Query("""SELECT * FROM metric_measured_value 
              WHERE metric_id = %s 
              AND measurement_time > %s""", 
              (metric_id, delta.days)) 

剛看到關於gmail style date formating這個問題,這表明a relative dates模塊。這與現在更爲相關,但它可能會提供一些想法。

+0

感謝您的回答。這是一個好主意,但這裏的間隔不一定是一年,可能是分鐘,小時,一天,一個月,一週或一年。有沒有辦法輕鬆做到這一點? –

+0

如果您知道該類型,則可以編寫一個switch語句。然後,使用datetime.date計算以天,周,月,年和datetime.datetime計算以秒,分和小時表示的差異。 –

+0

是的,我想這是我應該嘗試的最佳選擇。感謝Adam。 –