sql >> Databasteknik >  >> RDS >> Mysql

importfel med python-mysql-connector 1.16, django 1.6 och python 3.2.3

Efter att ha studerat koden ser det ut som att det finns något slags fel när man refererar till den importen. Jag tittade i filen /lib/python3.2/site-packages/django/utils/six.py och hittade var referensen var till modulen moves.zip_longest.

Först var denna referens:

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

Vilket betyder att den anropade klassen _MovedItems, och här är den med referensen till min modul som gick sönder.

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

Som sedan ärver från klassen _LazyDescr, men det är ett kort litet objekt. Jag vet inte var det gick fel, om du mappar tuppeln som skickas till MovedAttribute-konstruktorn mappar den den gamla versionen till den nya korrekt. Jag är inte säker på varför det misslyckas men om du tar bort importsatsen i filen compiler.py och helt enkelt anropar itertools zip_longest direkt, fungerar allt.

Så här ser det ut. Om du använder Python 3, redigera filen /lib/python3.2/site-packages/mysql/connector/django/compiler.py och ändra rad 6 från detta:

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

till detta:

from itertools import zip_longest



  1. Referens till Microsoft.SqlServer.Smo.dll

  2. Oracle Invoke REST Service från pl/sql

  3. Mysql-underfrågan gör alltid filsortering

  4. Bygga en generisk OO ACL med hjälp av Doctrine