torndb解决MySQLdb不支持python3问题

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问题)