问题是这样的:在(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模块文档获取更多信息!