如何在SQLAlchemy中使用二进制数据(BLOB类型列)。
我刚创建了一个包含字段key
,val
的表,其中val
是BLOB,当我查询表时,SQLAlchemy返回:
<read-only buffer for 0x83c3040, size -1, offset 0 at 0x83c3120>
如何使用此只读缓冲区?
答案 0 :(得分:1)
你可以迭代它(例如用于流式传输)或将其转换为字符串/二进制文件,如果你想将整个二进制文件存储在内存中(只要你不处理电影,这应该不是问题)数据库......)
>>> from sqlalchemy.util import buffer
>>> var = buffer('foo')
>>> var
<read-only buffer for 0xb727fb00, size -1, offset 0 at 0xb727fa80>
>>> str(var)
'foo'
>>> for i in var:
... print i
...
f
o
o
此致 克里斯托弗
答案 1 :(得分:0)
在SQLAlchemy 1.3中,使用Python2,二进制数据以str
的形式返回,而在Python 3中则为bytes
:
# -*- coding: utf-8 -*-
import zlib
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import orm
Base = declarative_base()
class Blobby(Base):
__tablename__ = 'blobby'
id = sa.Column(sa.Integer, primary_key=True)
blob = sa.Column(sa.BLOB)
engine = sa.create_engine('mysql+pymysql:///test', echo=True)
Base.metadata.drop_all(bind=engine, checkfirst=True)
Base.metadata.create_all(bind=engine)
Session = orm.sessionmaker(bind=engine)
session = Session()
data = zlib.compress('Hello world'.encode('ascii'))
session.add(Blobby(blob=data))
session.commit()
blob, = session.query(Blobby.blob).first()
print(type(blob), blob)
session.close()
Python2输出
(<type 'str'>, 'x\x9c\xf3H\xcd\xc9\xc9W(\xcf/\xcaI\x01\x00\x18\xab\x04=')
Python3输出:
<class 'bytes'> b'x\x9c\xf3H\xcd\xc9\xc9W(\xcf/\xcaI\x01\x00\x18\xab\x04='