Вставить 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,))