Mysql ИНТЕРВАЛ sql постановка задачи - PullRequest
1 голос
/ 01 августа 2011

Я использую следующий sql в терминале MySQL, и он отлично работает.

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: 'INTERVAL 2 year'

Что я делаю не так?

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Вероятно, ваша библиотека доступа к БД использует подготовленные операторы.INTERVAL - это ключевое слово MySQL, и его нельзя передавать в подготовленные операторы.

1 голос
/ 01 августа 2011

Вместо того, чтобы вычислять интервал в базе данных, почему бы не сделать это в 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 , который предложил модуль относительных дат . Это больше по отношению к сейчас, но может дать некоторые идеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...