python3 torndb:CONVERSIONS[field_type] = [(FLAG.BINARY, str)] + CONVERSIONS[f-程序员宅基地

技术标签: python  mysql  

问题:把一个项目从python2 升级到python3时,发现torndb不能用了。提示如下错误:

  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/micstu/.local/lib/python3.5/site-packages/torndb.py", line 260, in <module>
  CONVERSIONS[field_type] = [(FLAG.BINARY, str)] + CONVERSIONS[field_type]
  TypeError: can only concatenate list (not "type") to list

原因是:torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用。
1、安装pymysql

    pip install pymysql

2、根据错误找到torndb.py文件

   /home/micstu/.local/lib/python3.5/site-packages/torndb.py

3、修改部分torndb.py代码
1>导入模块

    import  pymysql
    try:
	    import pymysql.connections
	    import pymysql.converters
	    import pymysql.cursors
	    #import MySQLdb.constants
	    #import MySQLdb.converters
	    #import MySQLdb.cursors

2>连接方式

def reconnect(self):
    """Closes the existing database connection and re-opens it."""
    self.close()
    self._db = pymysql.connect(**self._db_args)# self._db = MySQLdb.connect(**self._db_args)
    self._db.autocommit(True)

3>修改连接参数,以及遍历字段类型时所使用的列表增加元素(python3使用append进行元素的添加,而不是使用加号)

#if MySQLdb is not None:
if pymsql is not None:
    # Fix the access conversions to properly recognize unicode/binary
    FIELD_TYPE = pymysql.connections.FIELD_TYPE # FIELD_TYPE = MySQLdb.constants.FIELD_TYPE
    FLAG = pymysql.constants.FLAG#FLAG = MySQLdb.constants.FLAG
    CONVERSIONS = copy.copy(pymysql.converters.conversions)#CONVERSIONS = copy.copy(MySQLdb.converters.conversions)

    field_types = [FIELD_TYPE.BLOB, FIELD_TYPE.STRING, FIELD_TYPE.VAR_STRING]
    if 'VARCHAR' in vars(FIELD_TYPE):
        field_types.append(FIELD_TYPE.VARCHAR)

    for field_type in field_types:
        CONVERSIONS[field_type] = [(FLAG.BINARY,str)].append(CONVERSIONS[field_type])
        #CONVERSIONS[field_type] = [(FLAG.BINARY, str)] + CONVERSIONS[field_type]

    # Alias some common MySQL exceptions
    IntegrityError = pymysql.IntegrityError#IntegrityError = MySQLdb.IntegrityError
    OperationalError = pymysql.OperationalError#OperationalError = MySQLdb.OperationalError

4>修改连接超时时间

def __init__(self, host, database, user=None, password=None,
             max_idle_time=7 * 3600, connect_timeout=10,
             time_zone="+0:00", charset = "utf8", sql_mode="TRADITIONAL"):

5>修改查询方法中的迭代方法(将izip改为zip_longest)

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

测试:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43183405/article/details/104859264

智能推荐

Fatal error: Call to a member function fetch_row() on a non-object in C:\wamp\www\baicaotang\admin\m_fatal error: call to a member function fetchrow() -程序员宅基地

文章浏览阅读1.9k次。昨晚在做测试的时候,输出数据测试的时候一直出现这个问题,_fatal error: call to a member function fetchrow() on a non-object in d:\xamp

http请求详解-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏36次。1. 简介HTTP(HyperText Transfer Protocol,超文本传输协议)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1。HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当_http请求

纯国产环境(银河麒麟 + 飞腾)JAVA程序(Springboot + Mybatis + 达梦数据库)部署_国产化 java 部署-程序员宅基地

文章浏览阅读7.4k次,点赞6次,收藏32次。目录JAVA程序部署前言项目打包银河麒麟jdk安装银河麒麟系统 达梦数据库 安装JAVA程序部署前言运行环境:银河麒麟 + 飞腾CPU项目框架:Springboot + Mybatis + 达梦数据库 JDK1.8上一篇写了该项目的源码,这篇主要写该项目在国产操作系统上部署以及达梦数据库在国产操作系统上安装,创建。查看项目源码请点链接纯国产环境JAVA程序搭建(Springboot + Mybatis + 达梦数据库)一项目打包修改pom文件:(注释generator插件,放开打包需要_国产化 java 部署

大尺度衰落与小尺度衰落_衰落与损耗可以相加嘛-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏31次。无线电磁波信号在收发天线长距离(远大于传输波长)或长时间范围发生的功率变化,称为大尺度衰落,一般可以用路径损耗模型来描述,路径损耗是由发射功率在空间中的辐射扩散造成的,根据功率传输Friss公式可计算出接收信号功率为::发射信号功率:发射天线增益:接收天线增益:电磁波的波长:收发端距离:系统的损耗因子,与传播特性无关通过对接收功率与发射功率作比值,可以把路径损耗定义为:假设通信系统是理想的(L=1),除去收发端天线的增益(),可得理想传播环境下路径损耗与收发端距离、传输频率的关系为:因此理想环境下,路径损耗_衰落与损耗可以相加嘛

STM32F207调试记录之串口配置_stm f207 串口速率-程序员宅基地

文章浏览阅读3.9k次,点赞2次,收藏4次。STM32F207调试记录之串口配置_stm f207 串口速率

【啊哈!算法】算法12:堆——神奇的优先队列(下)_4 17啊哈(i说哈1-程序员宅基地

文章浏览阅读4k次,点赞6次,收藏8次。接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。n=0;for(i=1;i){ n++; h[ n]=a[ i]; //或者写成scanf("%d",&h[ n]); _4 17啊哈(i说哈1

随便推点

HBase Windows 安装_windows安装hbase-程序员宅基地

文章浏览阅读4.3k次,点赞3次,收藏32次。在安装HBase之前,我们需要先安装JDK和Hadoop,具体JDK和Hadoop的安装我前面已经做过了,需要的话,请看我的另一篇博客:Hadoop Windows 安装 还是那句话,在安装HBase之前,我们需要搞清楚HBase、Hadoop和Java之间版本的对应关系:我们具体可以看Apache官网:HBase、Hadoop和Java之间版本关系 由于我的JDK版本为1.8和Hadoop版本为3.2.2,所以我这里下载HBase-2.4.10,现在给出Apache中Hbase所有版本下载:Hbas_windows安装hbase

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;新增模块管理界面导出功能(可按条件导出)_生成管理系统 .net-程序员宅基地

文章浏览阅读1.2k次。导出功能在很多应用场景中都需要,RDIFramework.NET V3.2版本在模块管理界面新增了导出功能,方便管理员对所有配置的模块进行管理。一、Web版模块管理导出功能Web版本的模块导出功能如下图所示: 单击导出按钮,在弹出的“导出Excel数据”窗口中,可以选择要导出的列,如下图所示:单击确定按钮,即可把选中的列导出到Excel中,如下:二、WinForm版模块管理导出功能。在WinFor..._生成管理系统 .net

python二进制取反_Python的二进制位运算-程序员宅基地

文章浏览阅读2.4k次。Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示:&:按位与|:按位或^:按位异或~:取反<>>:右移对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明:(1)首先看取反>>> ~1-..._python 二进制取反运算符

现有的图像三维重建技术介绍和比较_psp图像三维重构理论-程序员宅基地

文章浏览阅读2.5w次,点赞8次,收藏71次。图像三维重建技术简介_psp图像三维重构理论

休眠和睡眠有哪些区别?如何让电脑一键休眠?-程序员宅基地

文章浏览阅读550次。电脑中有休眠和睡眠,那么它们有什么区别呢?下面我们就通过本文来了解一下。

点云配准——经典配准算法及配准效果对比-程序员宅基地

文章浏览阅读1.3w次,点赞19次,收藏133次。点云配准技术即是通过寻找不同视角下不同点云之间的映射关系,利用一定的算法将同一目标场景的不同点云转换到同一个坐标系下,形成更完整的点云的过程。3D点云配准是是点云处理技术的一个重要组成部分。如何使点云配准方法更加快速准确 已成为一个点云研究的热点和难点。点云配准要应对点云数据的无序性、非结构化、不均匀和噪声等干扰。如何有效地利用已有的信息实现精确、鲁棒的点云配准算法具有重要的研究意义和价值。_点云配准