Как я могу запретить sqlite оценивать строку как математическое выражение?

Простой вопрос, который, вероятно, имеет очень простой ответ. Я пишу строки даты в формате «2012-06-10» в столбец TEXT из сценария Python.

например

 cur.execute ("CREATE TABLE tbl (date TEXT, ...)")

 cur.execute («INSERT INTO tbl VALUES (% s)»% (str (дата [i])), ...)

Скрипт фактически оценивает строку даты, поэтому «2012-06-10» записывается в таблицу как «1996». От чтения документов я предполагаю, что это имеет какое-то отношение к типу сродства, но я не могу понять, как переопределить или даже почему будет оцениваться строка.

One Solution collect form web for “Как я могу запретить sqlite оценивать строку как математическое выражение?”

Два пути:

  • Используя параметризованный запрос: cur.execute("INSERT INTO tbl VALUES (?), [str(date[i])]) . Это лучший способ. Сделайте это так. Второй метод включен только для потомков ,
  • Цитируя значение (обратите внимание: это почти наверняка почти в каждом случае неверно): cur.execute("INSERT INTO tbl VALUES ('%s')" %(str(date[i]), ) . Этот метод является субоптимальным, потому что, если вы не будете осторожны, вы будете уязвимы для SQL-инъекций.

Чтобы понять, почему это происходит, представьте запрос, который ваш код отправляет на SQLite:

  INSERT INTO tbl VALUES (2012-06-10); 

Который SQL-сервер правильно оценивает:

  INSERT INTO tbl VALUES (1996); 

Цитирование значения решит эту проблему:

  INSERT INTO tbl VALUES ('2012-06-10'); 

Но может привести к проблемам, если значение имеет в нем определенные символы (символы типа ' или нулевой байт»).

Однако с параметризованным запросом значения отправляются отдельно от запроса, поэтому нет никаких шансов, что они будут неверно истолкованы.

  • Python - mysqlDB, результат sqlite в качестве словаря
  • Дублируемое имя столбца 'model_id' django mysql error при миграции
  • Как проверить существование строки в SQLite с помощью Python?
  • Зашифрованный файл или db в python
  • Слияние файлов SQLite в один файл db и вопрос «начало / фиксация»
  • Определение времени выполнения запросов в SQLite
  • Есть ли способ получить схему базы данных из python?
  • Как экспортировать sqlite в CSV в Python без форматирования в виде списка?
  • Python - лучший язык программирования в мире.