问题是:在(pl)python代码中,我们计算了一个整数= 26663。 可以使用hex(myint)= 0x6827
轻松将其转换为十六进制到目前为止一切顺利!
现在,如何将此值 - 连接到字符串串联 - 写入PostgreSQL(v9)bytea字段?如果这很重要,则DB是UTF8编码的。
EG,这些例子都不起作用:
当然,我无法连接'str'和'int'对象:
rv = plpy.execute(plan, [ (string1 + 6827) ])
这个输入错误的十六进制代码0x6827
rv = plpy.execute(plan, [ (string1 + str('6827')) ])
帮助!
答案 0 :(得分:2)
我不熟悉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 module documentation。