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