我想在sql炼金术过滤器中创建查询,但列在变量中(动态)/在变量中指定。
原始查询:
db_session.query(Notice).filter(Notice.subject.like("%" +query+ "%"))
我想做这样的查询:
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)
发布于 2012-04-21 07:08:28
只需使用getattr标准python库函数按名称获取属性:
col_name = 'subject'
db_session.query(Notice).filter(getattr(Notice, col_name).like("%" + query + "%"))
发布于 2018-04-18 01:12:08
在较新的sqlalchemy版本中,应该这样做:
Notice.__table__.c[col_name]
所以:
(db_session
.query(Notice)
.filter(Notice.__table__.c[col_name].like("%" + query + "%")
)
发布于 2019-03-04 23:03:41
我尝试了@vans解决方案,但它不起作用。我总是收到一个AttributeError,抱怨我的表没有这一列。对我来说起作用的是table.columns
getattr(Notice.columns,col_name)
https://stackoverflow.com/questions/10251724
复制相似问题