PyGreSQL NULL для целочисленного поля - PullRequest
0 голосов
/ 26 февраля 2010

Я пытаюсь вставить несколько строк в таблицу, которая имеет поле целых чисел, которое может быть NULL:

cur.execute("INSERT INTO mytable (id, priority) VALUES (%(id)d, %(priority)d)", \
            {'id': id, 'priority': priority})

Переменная приоритета является целым числом или None. Это работает, когда приоритет имеет целочисленное значение, однако, когда он равен None, я получаю следующую ошибку:

internal error in 'BEGIN': int argument required

Я заметил, что для форматирования строки для Python в целом вы не можете использовать None в качестве значения целочисленного значения для форматирования - оно выдает ту же ошибку, что и pgdb. Однако, когда я изменяю строку форматирования на %(priority)s, ошибка меняется на:

internal error in 'BEGIN': unsupported format character 'W' (0x57) at index 60

Полагаю, это потому, что я пытаюсь импортировать строку в целочисленное поле.

Как импортировать значения NULL?

1 Ответ

1 голос
/ 02 июля 2012

Обычно Postgresql выполняет автоматическое приведение строковых значений к целому числу для целочисленных столбцов. Поэтому обычно безопасно использовать формататор строк, например% (priority) s, для целочисленного столбца, если параметр строки содержит целое число или None. Если для строки задано значение None, столбцу будет присвоено значение NULL.

...