美文网首页《Django By Example》
django mysql\base.py 报错 KeyError

django mysql\base.py 报错 KeyError

作者: 终可见丶 | 来源:发表于2019-01-26 20:02 被阅读5次

    这次升级了Python版本到了3.6.
    但是django2.2的长期支持版本还没稳,所以使用的是1.11的版本,于是写项目就报错了。
    然后使用django的时候,makemigrations的时候报错conn.encoders[SafeBytes] = conn.encoders[bytes] KeyError: <class 'bytes'>

    追踪源码:

    问题文件:Python36\lib\site-packages\django\db\backends\mysql\base.py

        def get_new_connection(self, conn_params):
            conn = Database.connect(**conn_params)
            conn.encoders[SafeText] = conn.encoders[six.text_type]
            conn.encoders[SafeBytes] = conn.encoders[bytes]
            return conn
    

    问题分析

    经过百度,发现没有相似的问题。随机谷歌,找到了相关的两个页面:

    所以出问题是因为mysqlclient的版本太新了,用pip3 list命令查看,果然我的mysqlclient 的版本是1.4.1 。

    解决方案

    1. 给MySQLclient降级。先卸载,再安装指定版本。pip3 uninstall mysqlclientpip3 install mysqlclient==1.3
    2. 我最开始的解决方案,改django的代码(Python36\lib\site-packages\django \db\backends\mysql\base.py),加一个if:
        def get_new_connection(self, conn_params):
            conn = Database.connect(**conn_params)
            conn.encoders[SafeText] = conn.encoders[six.text_type]
            # 先判断bytes是否存在于编码器中,如果在才执行操作
            if bytes in conn.encoders:
                conn.encoders[SafeBytes] = conn.encoders[bytes]
            return conn
    

    相关文章

      网友评论

        本文标题:django mysql\base.py 报错 KeyError

        本文链接:https://www.haomeiwen.com/subject/cgxwjqtx.html