Mysql конвертирует varchar в год при обновлении - PullRequest
0 голосов
/ 13 мая 2018

У меня есть запрос на обновление поля времени varchar, и я не хочу сохранять их в формате DATE.Формат моей строки yyyy-mm-dd 2018-05-13.

query = "UPDATE SchedulePlaylist
    SET start = %s ,end = %s
    WHERE playlist_id = %s AND schedule_id = %s" % (
                str(start), str(end), playlist_id, schedule_id)

This are contents of functions after updating the database.

But my actual table looks like this

как я могу предотвратить это преобразование.Я использую разъем python и flask_mysqldb

1 Ответ

0 голосов
/ 13 мая 2018

Правильный подход заключается в использовании параметров для передачи значений. Это может быть неудобно из-за проблем с датой / строкой.

Наивным решением в вашем случае является добавление одинарных кавычек вокруг значений:

query = "UPDATE SchedulePlaylist
    SET start = '%s', end = '%s'
    WHERE playlist_id = %s AND schedule_id = %s" % (
                str(start), str(end), playlist_id, schedule_id)

Ваш код обрабатывает 2018-04-30 как арифметику и создает 1984. Одиночная кавычка заставляет их быть представленными в виде строки.

Что вам действительно нужно сделать, так это исправить таблицу, чтобы столбцы имели правильный тип. Строка, хранящаяся как YYYY-MM-DD, имеет разумный тип , если вам нужно сохранить дату в виде строки . В противном случае используйте date. Однако это не решает проблему обновления.

Лучшее решение - использовать параметры, и это просто. Параметры отправляются в вызове execute:

query = """
UPDATE SchedulePlaylist
    SET start = ?, end = ?
    WHERE playlist_id = ? AND schedule_id = ?
""";

cursor.execute(query, (str(start), str(end), playlist_id, schedule_id));
...