如何使用Python将NULL数据插入MySQL数据库?

Los*_*oul 40 python mysql

将一些数据从Python脚本插入MySQL时,我遇到了一个奇怪的错误.它基本上与我插入的变量空白有关.我认为MySQL不喜欢空白变量但是还有其他东西我可以改变它以便它适用于我的insert语句吗?

IF如果它的空白,我可以成功地使用一个语句将其变为0,但这可能会破坏我计划稍后在MySQL中执行的一些数据分析.有没有办法将它转换为NULLMySQL接受它但不添加任何东西?

小智 144

使用mysqldb时cursor.execute(),传递值None,而不是"NULL":

value = None
cursor.execute("INSERT INTO table (`column1`) VALUES (%s)", (value,))
Run Code Online (Sandbox Code Playgroud)

这里找到答案

  • 对我来说,这在字符串中插入None作为字符串而不是NULL (5认同)
  • @velociraptor11这是因为它需要一个元组。在Python中,如果一个元组只有一个元素,您仍然必须使用逗号(元素,),否则括号将像往常一样被计算。一旦括号被求值,(元素)就变成元素 (4认同)
  • 在我的情况下这是一个空字符串 (2认同)
  • 哇,出于某种原因,变量值旁边的逗号(如“(value,)”)很重要。尝试插入同一行代码(不带逗号)时出现错误。 (2认同)

pha*_*ian -26

快速检查是否为空白,如果是,则将其设置为 NULL:

if(!variable_to_insert)
    variable_to_insert = "NULL"
Run Code Online (Sandbox Code Playgroud)

...然后确保插入的变量不在插入语句的引号中,例如:

insert = "INSERT INTO table (var) VALUES (%s)" % (variable_to_insert)
...
Run Code Online (Sandbox Code Playgroud)

不喜欢:

insert = "INSERT INTO table (var) VALUES ('%s')" % (variable_to_insert)
...
Run Code Online (Sandbox Code Playgroud)

  • 这实在是太糟糕了。您应该在 sql 语句中使用参数。不使用参数会让您容易受到 SQL 注入攻击。 (16认同)
  • @phaxian你不应该像这样插入。您应该传递一个带有参数的字符串,然后传递一个参数值列表作为元组。 (4认同)