如何在Python中使用Psycopg2将空字符写入bytea列

时间:2019-02-25 12:34:28

标签: python postgresql python-2.7 bytea

我正在尝试将二进制数据写入PostgreSQL表的bytea列中。我的数据包含空字符,并且出现以下错误。

ValueError: A string literal cannot contain NUL (0x00) characters.

这是我的代码。

import numpy as np
fft = [0.0, 0.2, 0.0215]
[float(i) for i in fft]
blob = struct.pack('%sd' % np.size(fft), *fft)
cur.execute("""INSERT INTO fft (id, v) VALUES(%s, %s)""", ("widget_fft", blob))

id的类型为text,而v的类型为bytea

我也尝试过使用psycopg.Binary(blob),但是它会插入不需要的反斜杠。

1 个答案:

答案 0 :(得分:1)

在Python 2.7中,您必须使用psycopg2.Binary包装器:

cur.execute("""INSERT INTO fft (id, v) VALUES(%s, %s)""",
            ("widget_fft", psycopg2.Binary(blob)))

有关详细信息,请参见the documentation

这在Python 3中不是必需的。

我尝试过,没有看到任何反斜线。您能显示blob中的确切内容吗?