可以将pickle对象可靠地编码为Postgres字符串(与NOTIFY一起发送)吗?

时间:2013-03-06 22:50:53

标签: python postgresql pickle psycopg2

Postgres NOTIFY仅支持字符串文字(无二进制数据)。我已经设法用以下方式将它与腌制对象一起使用:

message = cPickle.dumps(objectFoo)
cursor = connection.cursor() # this is psycopg2 connection
cursor.execute("NOTIFY channelFoo, %s", [message])

但是,如果我在编码对象中放入一些棘手的字节(例如'\ x80'字符串)。从execute()

返回错误
  

psycopg2.DataError:编码“UTF8”的无效字节序列:0x80

有解决方法吗?一个允许将pickled对象可靠地序列化为Postgres字符串,无论该对象包含什么数据?

1 个答案:

答案 0 :(得分:4)

Python pickles是字节的二进制序列。如果你需要在一个字符串中放一个pickle,然后对其进行编码。典型的技术包括使用base64或uuencode。然后在接收方解码它。