sql >> Base de Datos >  >> RDS >> Mysql

error de importación con python-mysql-connector 1.16, django 1.6 y python 3.2.3

Después de estudiar el código, parece que hay algún tipo de error al hacer referencia a esa importación. Busqué en el archivo /lib/python3.2/site-packages/django/utils/six.py y encontré dónde estaba la referencia al módulo move.zip_longest.

Primero fue esta referencia:

moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")

Lo que significa que estaba llamando a la clase _MovedItems, y aquí está con la referencia a mi módulo que se estaba rompiendo.

class _MovedItems(_LazyModule):
    """Lazy loading of moved objects"""

    _moved_attributes = [
        MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest")

class MovedAttribute(_LazyDescr):

    def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
        super(MovedAttribute, self).__init__(name)
        if PY3:
            if new_mod is None:
            new_mod = name
            self.mod = new_mod
            if new_attr is None:
                if old_attr is None:
                    new_attr = name
                else:
                    new_attr = old_attr
            self.attr = new_attr

Que luego hereda de la clase _LazyDescr, pero ese es un objeto pequeño y corto. No sé dónde salieron mal las cosas, si asigna la tupla que se pasa al constructor MovedAttribute, asigna correctamente la versión anterior a la nueva. No estoy seguro de por qué está fallando, pero si elimina la declaración de importación en el archivo compiler.py y simplemente llama a itertools zip_longest directamente, todo funciona.

Esto es lo que parece. Si está utilizando Python 3, edite el archivo /lib/python3.2/site-packages/mysql/connector/django/compiler.py y cambie la línea 6 de esta:

from django.utils.six.moves import zip_longest as six_zip_longest

a esto:

from itertools import zip_longest