ОБНОВЛЕНИЕ даты и времени в SQLite с помощью python

#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 разваливается. Запрос может быть «исправлен» путем добавления соответствующих кавычек в соответствующем месте. Я предлагаю вместо этого использовать заполнители, потому что это рекомендуемый стиль и очень хорошая привычка.