1

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

到目前为止,一切都很好!

现在,如何将这个值 - 写入字符串的串联 - 到 PostgreSQL (v9) bytea 字段中?数据库是 UTF8 编码的,如果这很重要的话。

EG,这些例子都不起作用:

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

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

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

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

帮助!

4

1 回答 1

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 的返回值将是一个字符串,您可以将其与另一个字符串连接,或者继续将更多二进制值打包到其中。

有关更多信息,请参阅结构模块文档

于 2011-08-03T16:17:39.510 回答