我有一个MySQL表,其中一个字段的类型为INT。 在我的Python脚本中,我正在读取十六进制值(例如0xc558)并尝试将此值作为INT字段类型插入表中。
这样做让我:
(1265, "Data truncated for column at row 1
)
INT字段类型应该是一个4字节的标准整数,它应该接受0xC558的值,在十进制世界中是50520。
我没有进行任何转换,我使用的代码是:
self.cur.execute("INSERT INTO my_table VALUES(NULL, %s)", (dataDict["hex_value"],)
其中dataDict [“hex_value”]为0xC558。
尝试使用int(dataDict["hex_value"])
也会出错:Invalid literal for int() with base 10: 0xC558
。
尝试使用int(dataDict["hex_value"],base=16)
也会出错:int() can't convert non-string with explicit base
。
编辑:值为'str'类型,print type(dataDict["hex_value"])
显示(type 'str')
答案 0 :(得分:1)
请注意,您不是要插入字符串或整数。
你说“dataDict [”hex_value“]是0xC558”但你没有说它是一个字符串还是(因为没有引号会暗示)一个整数。它不能是整数,因为您重新发出第一个错误。由于第二个错误,它显然不是字符串。
所以问题在于你在dataDict
中存储的任何类型,并且你没有为此编写代码。然而......
答案 1 :(得分:0)
使用:
int(dataDict["hex_value"][2:], base=16)
子字符串[2:]
在0x
前缀后提取字符串的一部分。更完整:
self.cur.execute("INSERT INTO my_table VALUES(NULL, %s)", (int(dataDict["hex_value"][2:], base=16), ))