【问题标题】:psycopg - INSERT gzipped data into bytea columnpsycopg - 将压缩后的数据插入 bytea 列
【发布时间】:2012-10-25 03:59:18
【问题描述】:

我正在尝试压缩一个字符串,然后使用psycopg2 将其写入bytea 列。

表格:

CREATE TABLE test
(
  data bytea
)

插入:

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

这是图书馆的问题吗?我需要以某种方式更改编码吗?任何帮助表示赞赏。

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    如果要将二进制数据插入数据库,则需要使用 psycopg2.Binary() 包装器。像您所做的那样使用字符串会导致数据被视为文本,由于编码问题而被拒绝,或者在您尝试再次读取时被接受但被破坏。

    尝试将最后一次执行调用替换为:

    cur.execute("INSERT INTO public.test VALUES (%s)", (psycopg2.Binary(data),))
    

    【讨论】:

    • 这适用于单个字段还是仅适用于整行?
    • 没有什么能阻止您提供多个psycopg2.Binary 类型的位置参数。它只是标准的 Python DB-API。
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2017-05-15
    • 2021-11-15
    • 2013-12-14
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多