2012-04-20 5 views
17

Voglio creare una query nel filtro sql alchimia, ma la colonna è (dinamica) nella variabile/specificata nella variabile.Come assegnare dinamicamente il nome della colonna dalla variabile stringa nel filtro sql alchemy?

originale Query:

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

voglio fare query come questa:

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) 

risposta

33

Basta usare getattr funzione della libreria standard di Python per ottenere un attributo per nome:

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

a la mia comprensione "Avviso" qui è una classe Python? come un modello di dati sqlarchemy? Come una tabella nel database ?? – paradox

+0

'Avviso' è una classe python ed è un modello' sqlalchemy' mappato. Quindi nel primo esempio di [Classical Mapping] (http://docs.sqlalchemy.org/en/latest/orm/mapping_styles.html#classical-mappings) sarebbe 'User', non' user'. – van