Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Importfehler mit python-mysql-connector 1.16, django 1.6 und python 3.2.3

Nach dem Studium des Codes sieht es so aus, als ob beim Verweisen auf diesen Import ein Fehler aufgetreten ist. Ich habe in die Datei /lib/python3.2/site-packages/django/utils/six.py geschaut und festgestellt, wo der Verweis auf das Modul move.zip_longest war.

Zuerst war diese Referenz:

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

Das heißt, es hat die Klasse _MovedItems aufgerufen, und hier ist es mit dem Verweis auf mein Modul, das kaputt gegangen ist.

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

Die erbt dann von der Klasse _LazyDescr, aber das ist ein kurzes kleines Objekt. Ich weiß nicht, wo etwas schief gelaufen ist. Wenn Sie das übergebene Tupel dem MovedAttribute-Konstruktor zuordnen, wird die alte Version der neuen korrekt zugeordnet. Ich bin mir nicht sicher, warum es fehlschlägt, aber wenn Sie die import-Anweisung in der Datei compiler.py entfernen und einfach itertools zip_longest direkt aufrufen, funktioniert alles.

So sieht das aus. Wenn Sie Python 3 verwenden, bearbeiten Sie die Datei /lib/python3.2/site-packages/mysql/connector/django/compiler.py und ändern Sie Zeile 6 davon:

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

dazu:

from itertools import zip_longest