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()

推荐阅读更多精彩内容

  • Since Jan.26th,2016 1、ubuntu 下运行 python 的几种方式 在 terminal...
    Rco阅读 1,445评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 84,907评论 14 122
  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 410评论 0 0
  • 公元2017,丁酉年,恰逢“山下火”之年,更兼闰六,至夏日,秦大旱,酷热难当。 自小暑起,气温已三十有七,及至大暑...
    欣然说阅读 295评论 6 5
  • 2017,11,22 今天是月亮日12周的第三天,似乎身体开始习惯了,之前会头晕,蹲下起来会半天才能缓过来,现在没...
    刘虹吟阅读 41评论 0 0