从python中,如何将整数写入(十六进制)bytea字段



问题是这样的:在(pl)python代码中,我们计算了一个整数= 26663。可以使用hex(myint) = 0x6827轻松地将其转换为十六进制

到目前为止一切顺利!

现在,如何将这个值-写入字符串的连接-写入PostgreSQL (v9) bytea字段?DB是utf8编码的,如果这很重要的话。

例如,这两个例子都不起作用:

在这里,当然,我不能连接'str'和'int'对象:

rv = plpy.execute(plan, [ (string1 + 6827) ])

这个输入了错误的十六进制代码0x6827

rv = plpy.execute(plan, [ (string1 + str('6827')) ])

帮助!

我不熟悉Postgres,但是hex(n)函数返回十六进制n数值的字符串表示形式。在我看来,将它与字符串连接的最好方法是使用格式字符串。例如:

rv = plpy.execute(plan, [ ( 'foo %s bar' % hex(6827) ) ] )

如果字符串确实在一个名为string1的变量中,并且您只需要用十六进制值附加它,那么使用+号进行简单的连接就可以了:

rv = plpy.execute(plan, [ ( string1 + hex(6827) ) ])

不需要转换,因为hex()函数返回一个字符串。

如果您实际上不想存储可打印的字符串表示形式,而是要存储二进制字符串,请使用struct模块创建字节数组。

import struct
bytes = struct.pack('i', 6827) # Ignoring endianness

很多人都对存储为"二进制"实际上意味着什么感到困惑,并且由于您正在使用似乎用于二进制存储的字段类型(bytea),也许这就是您实际想要的?

bytes的返回值将是一个字符串,您可以将其与另一个字符串连接,也可以继续将更多的二进制值打包到。

查看struct模块文档获取更多信息!

最新更新