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()
网友评论