2015-03-05 12 views
5

Mój silnik ma właściwość dMeta, które zwracają meta silników, potem mam klasy z metody zwanej table które w zasadzie robi to:sqlalchemy - AttributeError (key) brakuje klucza, gdy faktycznie jest w columnCollection

def table(meta): 
    return Table('table1',meta,autoload=True,schema=genShema()) 

Jestem automatycznego ładowania tabeli:

t = SomeClass.table(engine.dMeta) 
sql = select([t.c.ID, t.c.OPIS, t.c.IDG, 
         func.left(t.c.ID,2).label("Ident"), 
         (func.left(t.c.ID,2).label('Ident2')+' '+t.c.OPIS).label("show_as")])\ 
       .where(t.c.ATRIBUT=="VPFA") 

SQLAlchemy daje mi błąd:

def __getattr__(self, key): 
    try: 
     return self._data[key] 
    except KeyError: 
     raise AttributeError(key) 

Kluczem jest ID, self._data contains "ID" = {kolumna}, który jest table1.ID i jeśli wstawię self._data[key] otrzymam poprawną wartość, bez błędu, więc jaki jest problem?

Nawet po tym, jak ponownie uruchomić kod kilka razy, czasem pęka, czasami nie:/

+0

Czy zmieniacie gdzieś stolik? Jak generujesz schemat? –

+0

SomeClass.table (engine.dMeta) -> to wywołuje metodę tabeli dla tej klasy. Zwraca automatycznie ładowany stół. genShema() zwraca Brak, jeśli nie przekazano żadnego argumentu, w przeciwnym razie pusts ".dbo" na końcu, jeśli db to mssql – zPrima

+0

Sprawdź wielkość liter nazwy kolumny w db –

Odpowiedz

0

Wygląda na to, że nie jesteśmy concating poprawnie i że rzuca błąd spróbuj tego.

sql = select([t.c.ID, t.c.OPIS, t.c.IDG, func.left(t.c.ID,2).label("Ident"), func.concat(func.left(t.c.ID,2), literal(" "), t.c.OPIS)]).where(t.c.ATRIBUT=="VPFA") 
Powiązane problemy