Вставить 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 ответов


используйте кортеж, т. е.:

db.execute("INSERT INTO present VALUES('test2', ?, 10)", (None,))

последний раз проверено на: август 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,))