#python #database #sqlite #datetime #python-datetime
#python #База данных #sqlite #дата и время #python-datetime
Вопрос:
Я должен вставить datetimes в свой столбец SQL с помощью python, но когда я пытаюсь вставить строку в формате ГГГГ-ММ-ДД ЧЧ: мм: СС, SQLite выдает мне эту ошибку -sqlite3.OperationalError: около «11»: синтаксическая ошибка —
столбец теперь находится в ТЕКСТОВОМ формате (я также пробовал DATETIME), но, похоже, он его не принимает, единственный формат, который он принимает, — ГГГГ-ММ-ДД.
Это мой код:
for i in range(len(actualValue)):
attuale = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
c.execute('UPDATE alarm SET valoreAttuale = {} WHERE alarmId = {} '.format(actualValue[value], value 1))
c.execute('UPDATE alarm SET raiseDateTime = {} WHERE alarmId = {} '.format("2020-09-28 11:10:45", value 1))
Ответ №1:
Из документа python sqlite3 api
Вы не должны собирать свой запрос с использованием строковых операций Python, потому что это небезопасно; это делает вашу программу уязвимой для атаки с использованием SQL-инъекций
Еще одним хорошим аргументом в пользу использования заполнителей является этот пример. Если бы второй sql был написан без format
, это выглядело бы так:
UPDATE alarm SET raiseDateTime = "2020-09-28 11:10:45"
. Но format
«потребляет» кавычки ( "
), поэтому запрос НА ОБНОВЛЕНИЕ думает, что у него есть число (2020-09-28 в конце концов вычисляется как число), после чего синтаксис sql разваливается. Запрос может быть «исправлен» путем добавления соответствующих кавычек в соответствующем месте. Я предлагаю вместо этого использовать заполнители, потому что это рекомендуемый стиль и очень хорошая привычка.