Python stepped pit notes

A, Python2.x migrating to 3.x problem

1, torndb does not support 3.x, 3.x environment in error solutions

torndb module does not support python3.x, so it is necessary to modify the source code can be used normally part torndb

Source Review:
1, modified import module

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

2, a modified embodiment is connected 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, modify the connection parameters

# 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, modify the connection timeout provided torndb initialization process, the need to pass to 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, modify the query method of iterative methods

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

So far python3.x it has been able to normal use torndb

Released five original articles · won praise 1 · views 135

Guess you like

Origin blog.csdn.net/weixin_44094965/article/details/104027950