Не удается вставить None в поле mysql int

Мне нужно вставить int или None в поле MySql int (допускающее значение NULL). Это мой код:

cur = db.cursor()
contents = [None, 3]
for element in contents:
    print(element)
    cur.execute('insert into test.new_test (blubb) values (%s)', element)
db.commit()

Когда я использую не None, а другой int, это работает. Я просто не понимаю, почему не работает None, у меня ошибка

pymysql.err.ProgrammingError: (1064, «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы найти правильный синтаксис рядом с '% s)' в строке 1»),

несмотря на все найденные мной решения, в которых говорится, что% s может обрабатывать None ...
Кроме того, есть ли способ добавить сразу весь список (новую строку для каждой записи) без использования для цикла?


person LizzAlice    schedule 01.07.2018    source источник


Ответы (2)


В mysql он должен быть NULL, поэтому вам нужно изменить его на:

cur = db.cursor()
contents = ['NULL', 3]
for element in contents:
    print(element)
    cur.execute('insert into test.new_test (blubb) values (%s)', element)
db.commit()

ИЗМЕНИТЬ

Чтобы решить новую проблему, вы можете изменить ее на:

cur = db.cursor()
contents = [None, 3]
for element in contents:
    print(element)
    if element==None:
        cur.execute('insert into test.new_test (blubb) values (NULL)')
    else:
        cur.execute('insert into test.new_test (blubb) values (%s)', element)
db.commit()

Другой способ - изменить строгий режим, как это объясняется в здесь

person nacho    schedule 01.07.2018
comment
если я сделаю это, я получу pymysql.err.InternalError: (1366, "Incorrect integer value: 'NULL' for column 'blubb' at row 1") - person LizzAlice; 01.07.2018
comment
Содержание = ['', 3]? - person Bleach; 01.07.2018
comment
pymysql.err.InternalError: (1366, неверное целочисленное значение: '' для столбца 'blubb' в строке 1) - person LizzAlice; 01.07.2018

Пожалуйста, замените NONE на NULL. Команда, доставленная серверу MySQL, должна выглядеть так:

insert into test.new_test (blubb) values (NULL)

Где blubb - допустимый столбец в таблице new_test, и должны быть разрешены значения NULL.

Ваше здоровье,

person Alexandre Almeida    schedule 01.07.2018
comment
Как бы я это сделал? Если я попытаюсь заменить None на «Null» или «», я получаю сообщение об ошибке ... (см. Другой ответ) - person LizzAlice; 01.07.2018