Не могу вставить None в поле mysql int - PullRequest
0 голосов
/ 01 июля 2018

Мне нужно вставить int или None в поле MySql int (которое можно обнулять). Это мой код:

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, это работает. Я просто не понимаю, почему ни один не работает, я получаю ошибку

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

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

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

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

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

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

Приветствия

0 голосов
/ 01 июля 2018

В 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()

EDIT

Чтобы решить новый вопрос, вы можете изменить его на:

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()

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

...