2011-08-01 9 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 = "INTERVAL 2年"

エラーメッセージは次のとおりです。 切り捨てられた間違ったDOUBLE値: 'INTERVAL 2年' 私が間違っているのは何

ありがとうございました。

答えて

2

おそらくDBアクセスライブラリはプリペアドステートメントを使用しています。 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)) 

ちょうどa relative datesモジュールを示唆している、gmail style date formatingにこの質問を見ました。それは今よりも相対的ですが、いくつかのアイデアを与えるかもしれません。

+0

答えをありがとう。それはいい考えですが、間隔は必ずしも1年ではなく、分、時、日、月、週または年である可能性があります。簡単にこれを行う方法はありますか? –

+0

タイプがわかっている場合は、switch文を書くことができます。次に、datetime.dateを使用して日、週、月、年、datetime.datetimeの差を計算し、秒、分、および時間の差を計算します。 –

+0

はい、それは私が試してみるべき最善の選択だと思います。アダムに感謝します。 –