将十六进制值作为整数插入MySQL

时间:2014-03-06 23:28:52

标签: python mysql hex

我有一个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')

2 个答案:

答案 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), ))