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

3 投票
1 回答
2320 浏览
提问于 2025-04-15 19:57

我有一组值,如下所示:

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

我想把这些值放进我的PostgreSQL数据库中的一个bytea字段里,使用的是psycopg2这个库,但我对Python中的字节字符串不太了解。

有什么好的方法可以做到这一点吗?

1 个回答

2

我不太确定这是不是正确的方法,但下面的做法似乎有效:

    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')

然后可以把这个字符串分成一对一对的,转换成整数

撰写回答