2013-08-05 22 views
1

У меня возникают проблемы с python, когда я пытаюсь вставить NULL в поле с помощью подготовленного оператора mysqldb. Проблема в том, что python не любит NULL без кавычек, а затем MySQL не любит 'NULL' с кавычками; поэтому я пытаюсь найти способ вставить NULL, что и python, и MySQL. Вот мой сценарий:python mysqldb inserting NULL с использованием подготовленного оператора

sqlFailInsert = """INSERT INTO efix_headers (PathID) VALUES (%s);""" 
    //then later in my code 
    failcur = self.db.query(self.sqlFailInsert, (pathID if pathID else NULL)) 

Это генерирует ошибку питона: global name 'NULL' is not defined но когда я использую: pathID if pathID else 'NULL' MySQL рассматривает его как строку (кстати, pathID поле представляет собой целое поле) и входит 0 для значения (как и при вводе строки в поле int).

Итак, мои вопросы: как я могу вставить NULL в поле int с помощью подготовленного оператора и не нарушать правила python?

ответ

5

Использование None вместо NULL

sqlFailInsert = """INSERT INTO efix_headers (PathID) VALUES (%s);""" 
//then later in my code 
failcur = self.db.query(self.sqlFailInsert, (pathID if pathID else None)) 
+0

И MySQL будет оценивать 'Нет', чтобы автоматически NULL? – sadmicrowave

+1

Да. «Значения SQL NULL представлены одиночным синтаксисом Python None на входе и выходе». Дополнительная информация: http://www.python.org/dev/peps/pep-0249/ – GreyZmeem

Смежные вопросы