从Python脚本向MySQL插入一些数据时,我遇到了一个奇怪的错误。它基本上与我插入的变量空白有关。我认为MySQL不喜欢空白变量但是还有其他东西我可以改变它以便它与我的insert语句一起工作吗?
我可以成功使用IF
语句将其变为0,如果它是空白的,但这可能会破坏我计划稍后在MySQL中执行的一些数据分析。有没有办法将它转换为NULL
或其他东西,所以MySQL接受它但不添加任何东西?
答案 0 :(得分:123)
使用mysqldb和cursor.execute()
时,传递值None,而不是“NULL”:
value = None
cursor.execute("INSERT INTO table (`column1`) VALUES (%s)", (value,))
找到答案here
答案 1 :(得分:1)
如果col1是char,而col2是int,则可能是一个窍门:
insert into table (col1, col2) values (%s, %s) % ("'{}'".format(val1) if val1 else "NULL", val2 if val2 else "NULL");
您无需在%s中添加'',可以在将值传递给sql之前进行处理。
此方法在通过sqlalchemy会话执行sql时有效,例如session.execute(text(sql))
ps:尚未对sql进行测试
答案 2 :(得分:-2)
为什么不将变量设置为某个字符串,如'no price'
,然后在想要对数字进行数学运算时将其过滤掉?
filter(lambda x: x != 'no price',list_of_data_from_database)
答案 3 :(得分:-11)
快速检查空白,如果是,请将其设置为NULL:
if(!variable_to_insert)
variable_to_insert = "NULL"
...然后确保插入的变量不在insert语句的引号中,如:
insert = "INSERT INTO table (var) VALUES (%s)" % (variable_to_insert)
...
不喜欢:
insert = "INSERT INTO table (var) VALUES ('%s')" % (variable_to_insert)
...