gpt4 book ai didi

python - 将 NULL 值插入 double 据类型 MySQL Python

转载 作者:可可西里 更新时间:2023-11-01 07:58:11 25 4
gpt4 key购买 nike

我有一张 table 。这是创建语句。

   CREATE TABLE `runsettings` (
`runnumber` mediumint(9) NOT NULL,
`equipment` varchar(45) NOT NULL,
`wafer` varchar(45) NOT NULL,
`settingname` varchar(100) NOT NULL,
`float8value` double DEFAULT NULL,
`apcrunid` varchar(45) DEFAULT NULL,
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`intvalue` int(11) DEFAULT NULL,
`floatvalue` float DEFAULT NULL,
`Batch` varchar(45) DEFAULT NULL,
`IndexNum` smallint(6) DEFAULT '1',
`stringvalue` mediumtext,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1056989 DEFAULT CHARSET=latin1;

这是我的插入语句:

import mysql.connector

cnx = mysql.connector.connect(user='test',
password ='test',host='0.0.0.1',
database='test')


vallist = [(471285, u'CT19', 7, u'271042', u'Etch Time Min', None, None, None),
(471285, u'CT19', 7, u'00000', u'Etch Time Min', None, None, 'None')]


cursor = cnx.cursor()
# ss =

cursor.executemany("INSERT INTO runsettings (apcrunid,equipment,runnumber,wafer,settingname,intvalue,floatvalue,float8value) VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",vallist)
cnx.commit()

所以我尝试插入这些值。

vallist = [471285, u'CT19', 7, u'271042', u'Etch Time Min', None, None, None,
471285, u'CT19', 7, u'00000', u'Etch Time Min', None, None, 'None']

正在插入。数据库结果 enter image description here但是当列表值是这个时(不同之处在于字符串 'None' 首先被评估):

vallist = [471285, u'CT19', 7, u'271042', u'Etch Time Min', None, None, 'None', 
471285, u'CT19', 7, u'271042', u'Etch Time Min', None, None, None]

它给出了截断错误。

Data truncated for column 'float8value' at row 2 

当包含 None 的行是列表中的第一行时,为什么它不会在第一个列表中给出相同的截断错误?

最佳答案

这并不完全令人惊讶。在第一个实例中,您要插入 python 预定义常量 None

The sole value of types.NoneType. None is frequently used to represent the absence of a value, as when default arguments are not passed to a function.

这等同于 SQL NULL。在第二种情况下,您要将一个名为“None”的字符串插入表中。这两个是非常不同的。如果将字符串插入 double 或浮点型字段,您会看到各种错误,最常见的是您看到的错误。

在第一个例子中它起作用是因为你声明了:

 `float8value` double DEFAULT NULL,

这接受 NULL 并且 None 在您的值列表中排在第 8 位。当使用大量不同的参数时,使用命名参数始终是个好主意,这样一目了然地知道每一列绑定(bind)了什么。

更新:

运行您的代码后,唯一可以得出的结论是您发现了一个错误,通过使用 print(cursor.statement) 可以发现执行的查询是错误的。

INSERT INTO runsettings (apcrunid,equipment,runnumber,wafer,settingname,intvalue,floatvalue,float8value) 
VALUES (471285,'CT19',7,'271042','Etch Time Min',NULL,NULL,NULL),
(471285,'CT19',7,'00000','Etch Time Min',NULL,NULL,'None')

这不会产生错误,但如果您删除第一组值,则确实会产生错误。我的建议是提交错误报告

关于python - 将 NULL 值插入 double 据类型 MySQL Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com