python - 使用 SqlAlchemy 从 Mysql db 获取二进制数据时出现错误
问题描述
我遇到了问题。在这里,我的 SqlAlchemy 中有这个模型
class ConfigArchive(Base):
__tablename__ = 'config_archives'
cluster_id = Column(String(SIZE_TEXT),
ForeignKey('clusters.cluster_id'),
primary_key=True,
index=True,
unique=True,
nullable=False)
config_blob = Column(Binary,
nullable=False)
然后我使用以下过滤器获取我的二进制数据:
config_archive = self.session.query(ConfigArchive) \
.filter(ConfigArchive.cluster_id == cluster_id).one_or_none()
在这里我遇到了一个错误,例如:
File ".venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py",line 2924, in one_or_none
ret = list(self)
File ".venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py",line 2995, in __iter__
return self._execute_and_instances(context)
File ".venv/lib/python2.7/site-packages/sqlalchemy/orm/query.py",line 3018, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File ".venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py",line 948, in execute
return meth(self, multiparams, params)
File ".venv/lib/python2.7/site-packages/sqlalchemy/sql/elements.py",line 269, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File ".venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1060, in _execute_clauseelement
compiled_sql, distilled_params
File ".venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1200, in _execute_context
context)
File ".venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py",line 1416, in _handle_dbapi_exception
util.reraise(*exc_info)
File ".venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
context)
File ".venv/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute
cursor.execute(statement, parameters)
File ".venv/lib/python2.7/site-packages/mysql/connector/cursor_cext.py", line 272, in execute
self._handle_result(result)
File ".venv/lib/python2.7/site-packages/mysql/connector/cursor_cext.py", line 163, in _handle_result
self._handle_resultset()
File ".venv/lib/python2.7/site-packages/mysql/connector/cursor_cext.py", line 651, in _handle_resultset
self._rows = self._cnx.get_rows()[0]
File ".venv/lib/python2.7/site-packages/mysql/connector/connection_cext.py", line 288, in get_rows
_eof = self.fetch_eof_columns()['eof']
File ".venv/lib/python2.7/site-packages/mysql/connector/connection_cext.py", line 349, in fetch_eof_columns
for col in fields:
File ".venv/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1:
invalid start byte
我尝试解码我的数据并重新编码为 utf-8,但它不起作用。我还为 DB 设置了 charset=utf8 ,但它帮不了我
我不知道怎么说 SQLAlchemy 通过“latin-1”编码来解码我的二进制数据。因为,我认为,它有效,因为我在 debagging python 的内部源时尝试了这个
lib/python2.7/encodings/utf_8.py 并成功解码了我的二进制数据
所以,请,如果有人对此有所了解,请提出您的想法。谢谢
解决方案
推荐阅读
- python - 在谷歌存储桶上使用 os.stats
- python - Matplotlib:在图例中移动标记位置
- android - 从 logcat 录制视频后,Android Studio 变得无响应
- tensorflow - 根据输入的字母数字模式预测字母数字模式机器学习/深度学习
- excel - 在 Excel VBA 中将命名范围重新定义为不同的单元格
- r - R中的MANOVA效应大小(部分eta平方)
- python - 为什么我们在图像处理时使用 Unsqueeze() 函数?
- python - 美丽的汤不刮过去
- css - 试图将我的 svg 作为内容添加到 :before 链接的伪元素。一个 SVG 有效,另一个无效
- java - javax.websocket 客户端