Thread View: pl.comp.lang.python
5 messages
5 total messages
Started by janosikowy
Thu, 11 Feb 2010 01:07
sqlalchemy - property
Author: janosikowy
Date: Thu, 11 Feb 2010 01:07
Date: Thu, 11 Feb 2010 01:07
30 lines
1908 bytes
1908 bytes
hej,
mam następujący problem z sqlalchemy (0.5.6) - działam na windows.
definiuję klasę mniej więcej tak:
class Account(Base):
__tablename__ = 'accounts'
id = Column( Integer, primary_key=True )
_name = Column('name', String(length=255), nullable=False )
def get_name(self):
return self._name.lower().strip()
def set_name(self, value):
self._name = value.lower().strip()
name = synonym('_name', descriptor=property(get_name, set_name))
Niestety nie wiem co robię nie tak, ponieważ synonimy nie działają w
zapytaniach (filter, distinct nie widzi strip() i lower() ).
przykładowo:
Session.query(User.name).distinct()
zwraca mi dokładnie to co jest w bazie, bez potraktowania danych stripem i
lower. Z filter jest analogicznie, czyli dane z bazy nie są podmieniane przez
moje 'gettery'.
Acha, sprawdzałem też opcję map_column=True dla synonym() - bez zmian.
Proszę o naprowadzenie na trop co robię nie tak.
pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: sqlalchemy - property
Author: Piotr Husiatynski
Date: Thu, 11 Feb 2010 05:40
Date: Thu, 11 Feb 2010 05:40
32 lines
2070 bytes
2070 bytes
Dnia 11.02.2010 janosikowy <janosikowy@gazeta.SKASUJ-TO.pl> napisał/a:
> hej,
> mam następujący problem z sqlalchemy (0.5.6) - działam na windows.
> definiuję klasę mniej więcej tak:
>
> class Account(Base):
> __tablename__ = 'accounts'
> id = Column( Integer, primary_key=True )
> _name = Column('name', String(length=255), nullable=False )
>
> def get_name(self):
> return self._name.lower().strip()
> def set_name(self, value):
> self._name = value.lower().strip()
>
> name = synonym('_name', descriptor=property(get_name, set_name))
>
> Niestety nie wiem co robię nie tak, ponieważ synonimy nie działają w
> zapytaniach (filter, distinct nie widzi strip() i lower() ).
> przykładowo:
> Session.query(User.name).distinct()
> zwraca mi dokładnie to co jest w bazie, bez potraktowania danych stripem i
> lower. Z filter jest analogicznie, czyli dane z bazy nie są podmieniane przez
> moje 'gettery'.
> Acha, sprawdzałem też opcję map_column=True dla synonym() - bez zmian.
> Proszę o naprowadzenie na trop co robię nie tak.
`User` to klasa? Bo wyżej napisałeś `Account`. Jeśli to to samo, to zauważ, że
`User` jest obiektem typu klasa (nie jej instancją).
--
Piotr Husiatyński
Re: sqlalchemy - property
Author: janosikowy
Date: Thu, 11 Feb 2010 11:42
Date: Thu, 11 Feb 2010 11:42
26 lines
2014 bytes
2014 bytes
Piotr Husiatynski <husio@gmail.com> napisał(a): > > `User` to klasa? Bo wyżej napisałeś `Account`. Jeśli to to samo, to zauważ > , że > `User` jest obiektem typu klasa (nie jej instancją). > Kod jest przykładowy, pisany na żywca i oczywiście się walnąłem ;) Poprawne prawidłowe zapytania: Session.query(Account.name).distinct() Session.query(Account).filter(Account.name=='j.kowalski') Niestety deskryptory nadal nie działają tak jak to sobie wyobrażałem. Trochę się zagłębiam w dokumentację i jestem lekko zagubiony. Niby jest mowa o 'custom comparatorach', co chyba rozwiąże mój problem, jednak cytując dokumentację: http://www.sqlalchemy.org/docs/05/mappers.html#using-descriptors "The email attribute is now usable in the same way as any other mapped attribute, including filter expressions, get/set operations, etc.:" Getter/Setter działa tak jak przewidywałem. W Query descriptor zwraca mi zawsze wartość z bazy, atrbuty nie podlegają modyfikacji getterem. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: sqlalchemy - property
Author: janosikowy
Date: Thu, 11 Feb 2010 13:09
Date: Thu, 11 Feb 2010 13:09
32 lines
2065 bytes
2065 bytes
Piotr Husiatynski <husio@gmail.com> napisał(a): > > `User` to klasa? Bo wyżej napisałeś `Account`. Jeśli to to samo, to zauważ > , że > `User` jest obiektem typu klasa (nie jej instancją). > Kod jest przykładowy, pisany na żywca i oczywiście się walnąłem ;) Poprawne prawidłowe zapytania: Session.query(Account.name).distinct() Session.query(Account).filter(Account.name=='j.kowalski') Niestety deskryptory nadal nie działają tak jak to sobie wyobrażałem. Trochę się zagłębiam w dokumentację i jestem lekko zagubiony. Niby jest mowa o 'custom comparatorach', co chyba rozwiąże mój problem, jednak cytując dokumentację: http://www.sqlalchemy.org/docs/05/mappers.html#using-descriptors "The email attribute is now usable in the same way as any other mapped attribute, including filter expressions, get/set operations, etc.:" Getter/Setter działa tak jak przewidywałem. W Query descriptor zwraca mi zawsze wartość z bazy, atrybuty nie podlegają modyfikacji getterem. reasumując: czy definiując w podany sposób własne gettery i settery popełniam błąd, czy też muszę użyć własnego comparatora? pozdrawiam. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: sqlalchemy - property
Author: Piotr Husiatynski
Date: Thu, 11 Feb 2010 13:42
Date: Thu, 11 Feb 2010 13:42
37 lines
2593 bytes
2593 bytes
Dnia 11.02.2010 <janosikowy@WYTNIJ.gazeta.pl> napisał/a: > Piotr Husiatynski <husio@gmail.com> napisał(a): > >> >> `User` to klasa? Bo wyżej napisałeś `Account`. Jeśli to to samo, to zauważ >> , że >> `User` jest obiektem typu klasa (nie jej instancją). >> > Kod jest przykładowy, pisany na żywca i oczywiście się walnąłem ;) > Poprawne prawidłowe zapytania: > Session.query(Account.name).distinct() > Session.query(Account).filter(Account.name=='j.kowalski') > > Niestety deskryptory nadal nie działają tak jak to sobie wyobrażałem. > Trochę się zagłębiam w dokumentację i jestem lekko zagubiony. > Niby jest mowa o 'custom comparatorach', co chyba rozwiąże mój problem, > jednak cytując dokumentację: > http://www.sqlalchemy.org/docs/05/mappers.html#using-descriptors > "The email attribute is now usable in the same way as any other mapped > attribute, including filter expressions, get/set operations, etc.:" > > Getter/Setter działa tak jak przewidywałem. > W Query descriptor zwraca mi zawsze wartość z bazy, atrybuty nie podlegają > modyfikacji getterem. > > reasumując: > czy definiując w podany sposób własne gettery i settery popełniam błąd, > czy też muszę użyć własnego comparatora? Nie znam za dobrze slqalchemy, ale jeśli pola klasy pythonowej są mapowane na kolumny w bazie (a pewnie są), to jakiekolwiek działania na bazie przy użyciu nieistniejących kolumn są bez sensu. Nie wydaje mi się, żeby sqlalchemy było na tyle "inteligentne", żeby zajrzeć do stworzonych property i wnioskować o co chodzi. -- Piotr Husiatyński
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads