Python踩坑笔记

一,Python2.x迁移到3.x问题

1,torndb不支持3.x,在3.x环境下报错解决方案

torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用

源码修改:
1,修改导入模块

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

2,修改连接mysql的方式

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

3,修改连接参数

# if MySQLdb is not None:
if pymysql is not None:
    # Fix the access conversions to properly recognize unicode/binary
    # FIELD_TYPE = MySQLdb.constants.FIELD_TYPE
    # FLAG = MySQLdb.constants.FLAG
    # 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)] + CONVERSIONS[field_type]
    #
    # # Alias some common MySQL exceptions
    # IntegrityError = MySQLdb.IntegrityError
    # OperationalError = MySQLdb.OperationalError

    FIELD_TYPE = pymysql.connections.FIELD_TYPE  
    FLAG = pymysql.constants.FLAG  
    CONVERSIONS = copy.copy(pymysql.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])

    IntegrityError = pymysql.IntegrityError  
    OperationalError = pymysql.OperationalError

4,修改连接超时时间,在torndb初始化方法中设置,需要传递给pymysq

 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,修改查询方法中的迭代方法

    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.izip(column_names, row)) for row in cursor]
        # finally:
        #     cursor.close()
        """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]
        finally:
            cursor.close()

至此python3.x已经能够正常使用torndb

发布了5 篇原创文章 · 获赞 1 · 访问量 135

猜你喜欢

转载自blog.csdn.net/weixin_44094965/article/details/104027950
今日推荐