2012-04-20 6 views
17

Quiero crear una consulta en el filtro de alquimia sql, pero la columna es (dinámica) en variable/especificada en la variable.¿Cómo se da el nombre de la columna de forma dinámica a partir de la variable de cadena en el filtro de alquimia SQL?

Pregunta Original:

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

quiero hacer consulta como esta:

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) 

Respuesta

33

Sólo tiene que utilizar getattr función de la biblioteca estándar de Python para obtener un atributo por su nombre:

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

a mi comprensión "Aviso" aquí es una clase de Python? como un modelo de datos sqlarchemy? Como una tabla en la base de datos? – paradox

+0

'Notice' es una clase python, y es un modelo mapeado' sqlalchemy'. Entonces en el primer ejemplo de [Classical Mapping] (http://docs.sqlalchemy.org/en/latest/orm/mapping_styles.html#classical-mappings) sería 'User', not' user'. – van

Cuestiones relacionadas