如何在sql alchemy筛选器中从字符串变量动态指定列名?

2024-04-24 01:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在sql alchemy筛选器中创建查询,但列在变量中是(动态的)/在变量中指定

原始查询:

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)

Tags: namedbsqlsessionstatus动态colfilter
3条回答

在较新的sqlalchemy版本中,应按以下方式执行:

Notice.__table__.c[col_name]

因此:

(db_session
    .query(Notice)
    .filter(Notice.__table__.c[col_name].like("%" + query + "%")
)

我尝试了@vans解决方案,但没有成功。我总是收到一个AttributeError抱怨我的表没有那个列。对我起作用的是table.columns

getattr(Notice.columns,col_name)

只需使用getattr标准python库函数按名称获取属性:

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

相关问题 更多 >