2016-08-16 5 views
0

У меня возникли проблемы с изменением таблицы sql, содержащей дату.Перезапись datetime в mysql

Это код, который я бегу:

import pymysql 
cnx=pymysql.connect(dbstuff) 
cursor=cnx.cursor() 
cursor.execute("SELECT * FROM devices ORDER BY ip_addr,Port ASC") 
results=cursor.fetchall() 
lst = [(i,)+line[1:] for i, line in enumerate(results, 1)] 
values = ', '.join(map(str,lst)) 
query="DELETE FROM devices; INSERT INTO devices VALUES {}".format(values) 
query = query.replace("None","NULL") 
cursor.execute(query) 
cnx.commit() 
cnx.close() 

Если столбец даты в SQL является NULL, это работает без проблем. Если есть дата вставляется в поле, я получаю следующее сообщение об ошибке:

"FUNCTION datetime.datetime does not exist."

Когда я смотрю на результаты SQL SELECT запроса, значение столбца дата преобразуется в следующее:

datetime.datetime(2016, 8, 16, 11, 24, 4)

Я предполагаю, что это вещь python, а не вещь sql. Я не должен был все равно преобразовать это в формат, который будет понимать sql.

+0

Делая одно заявление в то время, внутри транзакции, вероятно, менее грязный, чем этот подход несколько запросов. – tadman

+0

Вам нужно «str' все элементы в первом наборе« результатов ». –

ответ

0

Вызов функции str функции объекта datetime.datetime преобразует ее в строковый формат, требуемый SQL. В настоящее время он пытается вставить объект python. Просто оберните ваш объект, как это:

dt = str(my_datetime_object) 
+0

В приведенном выше коде весь набор является кортежем кортежей, который получает преобразование в строку в команде 'values ​​= ',' .join (map (str, lst))' в целом. Я не могу понять, как преобразовать один объект в этот кортеж и внутри строки значений, он по-прежнему отображается как 'datetime.datetime (и т. Д.)'. – Daryl

Смежные вопросы