2012-04-20 13 views
17

Chcę utworzyć kwerendę w filtrze alchemicznym sql, ale kolumna jest (dynamiczna) w zmiennej/określonej w zmiennej.Jak dynamicznie nadać nazwę kolumny ze zmiennej łańcuchowej w filtrze alchemicznym sql?

Original Zapytanie:

db_session.query(Notice).filter(Notice.subject.like("%" +query+ "%")) 

chcę zrobić kwerendę tak:

col_name='subject' 
db_session.query(Notice).filter(Notice.col_name.like("%" +query+ "%")) 
col_name='status' 
status=0 
db_session.query(Notice).filter(Notice.col_name != 1) 

Odpowiedz

33

Wystarczy użyć getattr standardowych funkcji biblioteki Python uzyskać atrybut o nazwie:

col_name = 'subject' 
db_session.query(Notice).filter(getattr(Notice, col_name).like("%" + query + "%")) 
+0

do moje zrozumienie "Zawiadomienie" tutaj jest klasa Pythona? jako model danych sqlarchemy? Jako tabela w bazie danych? – paradox

+0

'Notice' jest klasą python i jest odwzorowanym modelem' sqlalchemy'. W pierwszym przykładzie z [Mapowanie klasyczne] (http://docs.sqlalchemy.org/en/latest/orm/mapping_styles.html#classical-mappings) będzie to "Użytkownik", a nie "użytkownik". – van

Powiązane problemy