INSERT SQL语句将无效值更改为None,但出现“Data Truncated”错误

时间:2017-08-23 14:49:52

标签: python mysql python-2.7 mysql-python

我在MySQL表中有一个FLOAT列,我试图使用Python脚本填充它。我使用这些值的大部分时间都是有效的浮点数,但有时它们是"NaN"。因此,在插入表格时,我会检查值是否为"NaN",如果是,我将其设置为None,根据我的理解,在表格中插入NULL。这种情况没有发生,我不确定为什么。

这是Python代码:

for row in zip(plasma_potential_set, floating_potential_set):
        row = [scan_result_id] + list(row)
        for i in range(len(row)):
            if str(row[i]).lower() == "nan":
                row[i] = None
        sql_insert = ('INSERT INTO langmuir_result(scan_data_id, 
                                                   plasma_potential, floating_potential)'
                        'VALUES(%s, "%s", "%s")')
        cursor.execute(sql_insert, row)
    mydb.commit()
    cursor.close()

以下是表格的CREATE语句:

CREATE TABLE result (result_id INT auto_increment, scan_data_id INT, 
plasma_potential FLOAT, floating_potential FLOAT, PRIMARY KEY (result_id));

这是我得到的错误:

_mysql_exceptions.DataError: (1265, "Data truncated for column 'plasma_potential' at row 1")

以下是将无效值设置为None后行的样子:

[1, None, 17.4651]

为什么会发生这种情况,我该如何解决?提前谢谢。

看过这个问题,但我的情况略有不同,而且这个问题没有答案:Unable to use None (NULL) values in python mysql.connector in prepared INSERT statement

1 个答案:

答案 0 :(得分:1)

您只需删除"参数列表中的VALUES即可。 将insert语句更改为:

sql_insert = ('INSERT INTO langmuir_result(scan_data_id, plasma_potential, floating_potential)'
                    'VALUES(%s, %s, %s)')

它将按预期工作。