美文网首页Python 运维
torndb解决MySQLdb不支持python3问题

torndb解决MySQLdb不支持python3问题

作者: LionelDong | 来源:发表于2017-12-06 17:20 被阅读49次

    python3.x torndb解决MySQLdb问题

    • 环境:win10 python3.6 pycharm
    • 在使用torndb的过程中发现其底层是对MySQLdb的封装,而MySQLdb不支持python3.x
      • 解决:安装mysqlclient包,其完全兼容MySQLdb
      • pip install mysqlclient


    • 解决了MySQLdb问题后,使用torndb的query功能是报了新的错误,如下:

    AttributeError: module 'itertools' has no attribute 'izip'

    • 源代码:
    #! /usr/bin env python3
    # -*- coding:utf-8 -*-
    
    import torndb
    
    config = {
        "host": "127.0.0.1:3306",
        "user": "root",
        "password": "bukeshuo",
        "database": "db_test"
    }
    def query_all():
        con = torndb.Connection(**config)
        results = con.query('select account from users')
        con.close()
        return results
    
    print(query_all())
    
    
    • 解决方案:更改con.query()中的源代码。(按住ctrl点击con.query 目的是找到这个模块的源代码)
    • 按照下面的提示进行更改,并保存。
        def query(self, query, *parameters, **kwparameters):
            """Returns a row list for the given query and parameters."""
            cursor = self._cursor()
            try:
                self._execute(cursor, query, parameters, kwparameters)
                column_names = [d[0] for d in cursor.description]
                """
                错误说itertools找不到izip模块。
                因为我们使用的mysqlclient替代MySQLdb,
                所以使用zip_longest模块替代izip模块。
                """
                 # 使用这一句替代下面一行代码
                 # return [Row(itertools.zip_longest(column_names, row)) for row in cursor]
                return [Row(itertools.izip(column_names, row)) for row in cursor]
            finally:
                cursor.close()
    
    

    相关文章

      网友评论

        本文标题:torndb解决MySQLdb不支持python3问题

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