gpt4 book ai didi

python - 来自 python,如何将整数写入(十六进制)bytea 字段

转载 作者:行者123 更新时间:2023-11-29 13:06:58 25 4
gpt4 key购买 nike

问题是这样的:在 (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')) ])

帮助!

最佳答案

我不熟悉 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获取更多信息!

关于python - 来自 python,如何将整数写入(十六进制)bytea 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6929512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com