使用SqlAlchemy从Mysql db获取二进制数据时出现错误

时间:2019-01-14 13:21:04

标签: python mysql python-2.7 sqlalchemy

我遇到了问题。在这里,我的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()

在这里,我遇到了类似的错误:

...

  

文件   “ .venv / lib / python2.7 / site-packages / sqlalchemy / orm / query.py”,   第2924行,在one_or_none中       ret = list(self)文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / orm / query.py”,   第2995行,位于 it       返回self._execute_and_instances(context)文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / orm / query.py”,   第3018行,在_execute_and_instances中       结果= conn.execute(querycontext.statement,self._params)文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / engine / base.py”,   第948行,执行       返回meth(self,multiparams,params)文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / sql / elements.py”,   _execute_on_connection中的第269行       返回连接。_execute_clauseelement(自己,多参数,参数)文件   “ .venv / lib / python2.7 / site-packages / sqlalchemy / engine / base.py”,   第1060行,在_execute_clauseelement中       编译后的SQL,stilled_pa​​rams文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / engine / base.py”,   _execute_context中的第1200行       上下文)文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / engine / base.py”,   _handle_dbapi_exception中的第1416行       util.reraise(* exc_info)文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / engine / base.py”,   第1193行,在_execute_context中       上下文)文件“ .venv / lib / python2.7 / site-packages / sqlalchemy / engine / default.py”,   do_execute中的509行       cursor.execute(语句,参数)文件“ .venv / lib / python2.7 / site-packages / mysql / connector / cursor_cext.py”,   第272行,在执行中       self._handle_result(result)文件“ .venv / lib / python2.7 / site-packages / mysql / connector / cursor_cext.py”,   _handle_result中的第163行       self._handle_resultset()文件“ .venv / lib / python2.7 / site-packages / mysql / connector / cursor_cext.py”,   _handle_resultset中的第651行       self._rows = self._cnx.get_rows()[0]文件“ .venv / lib / python2.7 / site-packages / mysql / connector / connection_cext.py”,   第288行,位于get_rows中       _eof = self.fetch_eof_columns()['eof']文件“ .venv / lib / python2.7 / site-packages / mysql / connector / connection_cext.py”,   349行,位于fetch_eof_columns中       对于字段中的col:文件“ .venv / lib / python2.7 / encodings / utf_8.py”,   第16行,在解码中       返回codecs.utf_8_decode(input,errors,True)UnicodeDecodeError:'utf8'编解码器无法解码位置1的字节0x8b   起始字节无效

我尝试解码数据并再次编码为utf-8,但是它不起作用。我也为数据库设置了charset = utf8,这对我没有帮助

我不知道如何说SQLAlchemy通过'latin-1'编码解码我的二进制数据。因为,我认为它可行,导致我在

中的python源文件中解包时尝试
  

lib / python2.7 / encodings / utf_8.py   并成功解码了我的二进制数据

所以,如果有人对此有所了解,请提出您的想法。谢谢

0 个答案:

没有答案