如何使用psycopg2获取二进制数据

时间:2016-06-09 05:09:10

标签: python postgresql psycopg2

我有一个包含二进制数据的列。如果我fetchone()它没有给我任何数据,而是我fetchall()然后得到下面的结果。如何将二进制数据转换为变量,然后将其转换为base64编码的字符串?

con = psycopg2.connect(config.DB_CONNECTION)                
cur = con.cursor()
cur.execute("select image from user_tbl where mobile=%s",(str(jsond['mobb'][0]),))
print cur.fetchall()
[(read-only buffer for 0x038DA430, size 64041, offset 0 at 0x03AE61C0,)]

2 个答案:

答案 0 :(得分:1)

psycopg2将二进制数据(可能存储在表中的bytea列中)返回到Python 2中的buffer对象中,或者返回到Python 3中的memoryview

buffermemoryview对象都可以直接传递给base64字符串编码器,因此这将对base 64中的二进制数据进行编码:

import base64

rows = cur.fetchall()
binary_img = rows[0][0]
base64_img = base64.b64encode(binary_img)

在Python 2中,如果您想要二进制数据本身,可以使用str()或切片[:] buffer对象。在Python 3中,您可以使用tobytes()对象的memoryview方法。

答案 1 :(得分:0)

您需要阅读缓冲区:

import base64

# your code here

data = base64.encode(curo[0].read())