无法将None插入mysql int字段

时间:2018-07-01 17:33:50

标签: mysql pymysql

我需要在MySql int字段(可为空)中插入int或None。 这是我的代码:

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服务器版本相对应的手册   为在第1行“)附近使用'%s)'的正确语法,

尽管我找到了所有解决方案,但是说%s可以处理None ...
另外,也许有一种方法可以立即添加整个列表(每个条目都有一个新行),而无需使用for循环?

2 个答案:

答案 0 :(得分: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()

另一种方法是更改​​严格模式,如它解释here

答案 1 :(得分:0)

请用NULL代替NONE。传递给MySQL服务器的命令应如下所示:

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

blubb是表new_test中的有效列,并且必须允许使用NULL值。

干杯