通过psycopg2将bytea字段导入PostgreSQL数据库

发布于 2024-08-23 14:49:54 字数 215 浏览 4 评论 0原文

我有一个这样的值列表:

row = ['0x14', '0xb6', '0xa1', '0x0', '0xa1', '0x0']

我想使用 psycopg2 将这些值插入到我的 PostgreSQL 数据库中的 bytea 字段中,但我不熟悉 python 中的字节字符串。

实现这一目标的最佳方法是什么?

I have a list of values as such:

row = ['0x14', '0xb6', '0xa1', '0x0', '0xa1', '0x0']

I would like to insert these into a bytea field in my PostgreSQL database, using psycopg2, but I am unfamiliar with byte strings in python.

What is the best way to achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉酒的小男人 2024-08-30 14:49:54

我不确定这是否是正确的方法,但以下似乎有效:

    row = ['0x14', '0xb6', '0xa1', '0x0', '0xa1', '0x0']
    as_hex = ''.join(byte[2:].zfill(2) for byte in row)
  # as_hex = '14b6a100a100'
    bytes = buffer(as_hex.decode('hex'))

    cur.execute("INSERT INTO mylog (binaryfield) VALUES (%(bytes)s)", 
                {'bytes': bytes})

只是一个旁注,当从数据库中将其取回时,psycopg2 将其作为缓冲区提供,其中前 4 个字节是总长度,因此获取原始数据为:

    cur.execute("SELECT binaryfield FROM mylog")
    res = cur.fetchone()
    my_data = str(res[4:]).encode('hex')

然后可以将字符串分成对并转换为整数。

I am not sure if this is the correct way, but the following appears to work:

    row = ['0x14', '0xb6', '0xa1', '0x0', '0xa1', '0x0']
    as_hex = ''.join(byte[2:].zfill(2) for byte in row)
  # as_hex = '14b6a100a100'
    bytes = buffer(as_hex.decode('hex'))

    cur.execute("INSERT INTO mylog (binaryfield) VALUES (%(bytes)s)", 
                {'bytes': bytes})

Just a side note, when fetching it back out of the database psycopg2 provides it as a buffer, the first 4 bytes of which are the total length, so get the original data as:

    cur.execute("SELECT binaryfield FROM mylog")
    res = cur.fetchone()
    my_data = str(res[4:]).encode('hex')

The string can then be split into pairs and cast to integers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文