Mysql
 sql >> Database >  >> RDS >> Mysql

errore di importazione con python-mysql-connector 1.16, django 1.6 e python 3.2.3

Dopo aver studiato il codice, sembra che ci sia un qualche tipo di errore quando si fa riferimento a quell'importazione. Ho esaminato il file /lib/python3.2/site-packages/django/utils/six.py e ho trovato dove si trovava il riferimento al modulo moves.zip_longest.

Il primo era questo riferimento:

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

Ciò significa che stava chiamando la classe _MovedItems, ed eccola con il riferimento al mio modulo che si stava rompendo.

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

Che poi eredita dalla classe _LazyDescr, ma questo è un piccolo oggetto corto. Non so dove le cose siano andate storte, se mappi la tupla passata al costruttore MovedAttribute, mappa correttamente la vecchia versione a quella nuova. Non sono sicuro del motivo per cui sta fallendo, ma se rimuovi l'istruzione import nel file compiler.py e chiami semplicemente itertools zip_longest direttamente, funziona tutto.

Ecco come appare. Se stai usando Python 3, modifica il file /lib/python3.2/site-packages/mysql/connector/django/compiler.py e cambia la riga 6 da questa:

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

a questo:

from itertools import zip_longest