Вставить Null в SQLite3 в Python
Я пытаюсь вставить тег None значение в строке записи моей БД. В таблице
db.execute("INSERT INTO present VALUES('test', ?, 9)", "This is a test!")
db.execute("INSERT INTO present VALUES('test2', ?, 10)", None)
но я получаю сообщение об ошибке:
ValueError: parameters are of unsupported type
как вставить пустое значение для второго поля в строке?
2 ответов
последний раз проверено на: август 2018
- Python 3.6.1
- Python 2.7.10
я не уверен, что это было так, когда первоначальный вопрос был опубликован, но на сегодняшний день:
db.execute("INSERT INTO present VALUES('test', ?, 9)", "This is a test!")
закидываем
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 15 supplied.
когда побежал.
, потому что execute() принимает sql - который является SQL-запросом для выполнения и parameters - который является итерируемым, содержащий параметры запроса (в настоящее время это верно для Python 2 и Python 3. Поскольку string является iterable-он обрабатывает его соответственно.
Docs четко заявить, что Python None тип соответствует SQLite NULL тип.
Итак, правильный способ сделать это было бы:
db.execute("INSERT INTO present VALUES('test2', :null, 10)", {'null':None})
#or
db.execute("INSERT INTO present VALUES('test2', ?, 10)", (None,))