我有一个包含二进制数据的列。如果我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,)]
答案 0 :(得分:1)
psycopg2
将二进制数据(可能存储在表中的bytea
列中)返回到Python 2中的buffer
对象中,或者返回到Python 3中的memoryview
中
buffer
和memoryview
对象都可以直接传递给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())