2016-06-09 5 views
3

У меня есть столбец, содержащий двоичные данные. Если я делаю fetchone(), это не дает мне никаких данных, вместо этого я делаю fetchall(), а затем получаю результат ниже. Как O может получить эти двоичные данные в переменную, а затем преобразовать ее в кодировку base64?Получить двоичные данные с помощью psycopg2

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

Почему эта помеченная Flask-SQLAlchemy? Вы используете psycopg2. Хотя использование SQLAlchemy будет работать с этим для вас. – davidism

ответ

0

Вы должны прочитать буфер:

import base64 

# your code here 

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

psycopg2 возвращает двоичные данные (вероятно, хранится в bytea столбца в таблице) в buffer объекта в Python 2, или в memoryview в Python 3.

Оба buffer и memoryview объекты могут быть переданы непосредственно в base64 строки кодера, так что это будет кодировать двоичные данные в базе 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.

Смежные вопросы