Ili*_*oly 7 python postgresql psycopg2
我正在尝试gzip一个字符串,然后bytea使用psycopg2将其写入一个列.
表:
CREATE TABLE test
(
data bytea
)
Run Code Online (Sandbox Code Playgroud)
插入:
import psycopg2
data = "some string".encode("zlib") # 'x\x9c+\xce\xcfMU(.)\xca\xccK\x07\x00\x1ak\x04l'
conn = psycopg2.connect("my parameters")
cur = conn.cursor()
cur.execute("INSERT INTO public.test VALUES (%s)", (data,))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0x9c
Run Code Online (Sandbox Code Playgroud)
这是图书馆的问题吗?我需要以某种方式更改编码吗?任何帮助表示赞赏.
Jam*_*dge 18
如果要将二进制数据插入数据库,则需要使用psycopg2.Binary()包装器.使用像您所做的字符串将导致数据被视为文本,这将由于编码问题而被拒绝,或者当您尝试再次阅读时被接受但是被破坏.
尝试使用以下命令替换上次执行调用
cur.execute("INSERT INTO public.test VALUES (%s)", (psycopg2.Binary(data),))
Run Code Online (Sandbox Code Playgroud)