首页 > 解决方案 > MySQL 版本 8 Python 3.7 无法将 None 值写为 NULL

问题描述

以前版本的代码使用 Python 2.7 可以很好地写入 AWS MySQL 版本 8,其中包含以下内容:


"""插入到 test_data(test_instance_testid,
meas_time, data_type_name, value,corner_case, xmit, string_value) VALUES('15063', '2021-03-19 20:36:00', 'DL_chamber_temp', '23.4', 'None ', '无', '无')"""

但是现在,将 Python 3.7 移植到同一台服务器上,我得到了这个:

pymysql.err.InternalError:(1366,“不正确的整数值:第 1 行的列 'xmit' 的'None'”)

这是有道理的,因为它是一个 str 值 'None' 而不是 Python 类型 None (尽管它曾经可以工作)。

将这些列填充为 NULL 值是合法的——这是它们在 test_data 表中的默认值。

如果我更改代码并将值设置为 Python None,我会得到一个我完全不理解的错误:

"""插入到 test_data(test_instance_testid,
meas_time, data_type_name, value,corner_case, xmit, string_value) VALUES('15063', '2021-03-19 20:36:00', 'DL_chamber_temp', '23.4', 无,无,无)"""

pymysql.err.InternalError:(1054,“'字段列表'中的未知列'None'”)

我非常感谢任何帮助或建议。谢谢,迈克

谢谢您的帮助!是的,NULL 确实有效,但我一直坚持如何在我的方法中动态处理值类型。根据调用的不同,我需要在一种情况下写一个带引号的值,在其他情况下写一个不带引号的 NULL。出于某种原因,我的旧代码(不合逻辑!)有效。我已经尝试了我能想到的一切,但没有任何运气。关于如何做到这一点的任何想法?

标签: pythonmysql

解决方案


也不应该适用于 python 2.7。'None' 是一个字符串,您不能将其放入 Integer 字段。无论如何试试这个

"""INSERT INTO test_data(test_instance_testid,
meas_time, data_type_name, value, corner_case, xmit, string_value) VALUES('15063', '2021-03-19 20:36:00', 'DL_chamber_temp', '23.4', null, null, null)"""

推荐阅读