У меня есть простой запрос, который преобразует столбец VARCHAR в datetime (тот, который я предоставляю здесь, представляет собой даже упрощенную версию, которая иллюстрирует проблему). При выполнении непосредственно в MySQL запрос выполняется, как ожидалось:Форматирование даты и времени с torndb python
mysql> SELECT STR_TO_DATE('01:35 PM', '%h:%i %p') as t;
+----------+
| t |
+----------+
| 13:35:00 |
+----------+
Однако, когда я бегу точно такой же запрос в torndb:
row = conn.get("SELECT STR_TO_DATE('01:35 PM', '%%h:%%i %%p') as t")
print ">>", row.t
я получаю следующее предупреждение (сопп правильно построена с использованием torndb. Подключение):
/Library/Python/2.7/site-packages/torndb.py:226: Warning: Incorrect datetime value: '01:35 PM' for function str_to_date
return cursor.execute(query, kwparameters or parameters)
>> None
Заглядывая MySQLdb, кажется, что проблема связана с ним:
conn = db.connect("localhost", 'xxx')
c = conn.cursor()
c.execute("SELECT STR_TO_DATE('01:35 PM', '%%h:%%i %%p') as t")
main:1: Warning: Incorrect datetime value: '01:35 PM' for function str_to_date
1L
Однако, когда я удалить двойной %%, он отлично работает:
c.execute("SELECT STR_TO_DATE('01:35 PM', '%h:%i %p') as t")
1L
c.fetchone()
(datetime.timedelta(0, 48900),)
Не уверен, что здесь происходит ...
По-видимому, проблема заключается в аргументе torndb pass для инициализации mysqldb - sql_mode = "TRADITIONAL". Удаление этой проблемы решает проблему, но я не уверен, почему это вызывает проблему. – udiw