Mysql
 sql >> Baza danych >  >> RDS >> Mysql

błąd importu z python-mysql-connector 1.16, django 1.6 i python 3.2.3

Po przestudiowaniu kodu wygląda na to, że wystąpił jakiś błąd podczas odwoływania się do tego importu. Zajrzałem do pliku /lib/python3.2/site-packages/django/utils/six.py i znalazłem odniesienie do modułu move.zip_longest.

Pierwszym był ten odnośnik:

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

Co oznacza, że ​​wywołał klasę _MovedItems, a tutaj jest z odniesieniem do mojego modułu, który się zepsuł.

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

Który następnie dziedziczy po klasie _LazyDescr, ale jest to krótki, mały obiekt. Nie wiem, gdzie coś poszło nie tak, jeśli zmapujesz przekazaną krotkę do konstruktora MovedAttribute, mapuje on poprawnie starą wersję na nową. Nie jestem pewien, dlaczego to się nie udaje, ale jeśli usuniesz instrukcję import z pliku compiler.py i po prostu wywołasz bezpośrednio itertools zip_longest, wszystko zadziała.

Oto jak to wygląda. Jeśli używasz Pythona 3, edytuj plik /lib/python3.2/site-packages/mysql/connector/django/compiler.py i zmień linię 6 z tego:

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

do tego:

from itertools import zip_longest



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz dane MySQL za pomocą klauzul where

  2. Uciekaj przed surowymi zapytaniami SQL w Laravel 4

  3. PHP MYSQL :sposób na wyświetlenie tabeli w porządku rosnącym

  4. Zamknij MySQL bez ponownego uruchamiania na El Capitan

  5. Nieznana kolumna w 'liście pól', gdy w podzapytaniu znajduje się symbol zastępczy przygotowanej instrukcji