Как я могу запретить 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'); 

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

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

  • Sqlite / SQLAlchemy: как применять внешние ключи?
  • Интерфейс GUI для ввода данных sqlite в Python
  • Импорт CSV-файла в таблицу базы данных sqlite3 с использованием Python
  • Использование инструкции WHERE ___ IN ___
  • Как вы избегаете строк для имен таблицы / столбцов SQLite в Python?
  • Вложенные транзакции с SQLAlchemy и sqlite
  • Различия Datetime в Django с использованием SQLite
  • Может ли SQLAlchemy автоматически создавать отношения из схемы базы данных?
  • Что это за инструкция cur.execute?
  • Добавление фрейма данных Pandas в таблицу sqlite с помощью первичного ключа
  • jQuery ui sortable - сохранить в базу данных с помощью Python / Flask / SQLite
  • Python - лучший язык программирования в мире.