如何在SQLAlchemy中使用二进制数据?

如何在SQLAlchemy中使用二进制数据?,sqlalchemy,Sqlalchemy,如何在SQLAlchemy中使用二进制数据(BLOB类型列) 我刚刚创建了一个表,其中包含字段key,val,其中val是BLOB,当我查询该表时,SQLAlchemy返回: <read-only buffer for 0x83c3040, size -1, offset 0 at 0x83c3120> 如何使用此只读缓冲区?如果希望将整个二进制文件存储在内存中,您可以对其进行迭代(例如,流式处理),或者将其转换为字符串/二进制文件(只要您不在数据库中处理电影,这应该不是问题…

如何在SQLAlchemy中使用二进制数据(BLOB类型列)

我刚刚创建了一个表,其中包含字段
key
val
,其中
val
是BLOB,当我查询该表时,SQLAlchemy返回:

<read-only buffer for 0x83c3040, size -1, offset 0 at 0x83c3120>

如何使用此只读缓冲区?

如果希望将整个二进制文件存储在内存中,您可以对其进行迭代(例如,流式处理),或者将其转换为字符串/二进制文件(只要您不在数据库中处理电影,这应该不是问题…)

来自sqlalchemy.util导入缓冲区的
>>
>>>var=缓冲区('foo')
>>>变量
>>>str(var)
“福”
>>>对于var中的i:
...   打印i
... 
F
o
o
问候,,
Christoph

在SQLAlchemy 1.3中,使用Python2,二进制数据返回为
str
,在Python3中为
bytes

#-*-编码:utf-8-*-
进口zlib
将sqlalchemy作为sa导入
从sqlalchemy.ext.declarative导入声明性基础
从sqlalchemy导入orm
Base=声明性_Base()
类Blobby(基):
__tablename_uuu='blobby'
id=sa.Column(sa.Integer,主键=True)
blob=sa.Column(sa.blob)
engine=sa.create_引擎('mysql+pymysql:///test,echo=True)
Base.metadata.drop_all(bind=engine,checkfirst=True)
Base.metadata.create_all(bind=engine)
Session=orm.sessionmaker(bind=engine)
会话=会话()
data=zlib.compress('Hello world'.encode('ascii'))
session.add(Blobby(blob=data))
session.commit()
blob,=session.query(Blobby.blob.first())
打印(类型(blob),blob)
session.close()
Python2输出

(,'x\x9c\xf3H\xcd\xc9\xc9W(\xcf/\xcaI\x01\x00\x18\xab\x04='))
Python3输出:

b'x\x9c\xf3H\xcd\xc9\xc9W(\xcf/\xcaI\x01\x00\x18\xab\x04=)

此答案似乎适用于sqlalchemy<0.8.2的版本。您可以更新答案吗?
>>> 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