首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在sql炼金术过滤器中从字符串变量中动态给出列名?

如何在sql炼金术过滤器中从字符串变量中动态给出列名?
EN

Stack Overflow用户
提问于 2012-04-21 02:40:56
回答 4查看 26K关注 0票数 43

我想在sql炼金术过滤器中创建查询,但列在变量中(动态)/在变量中指定。

原始查询:

代码语言:javascript
复制
db_session.query(Notice).filter(Notice.subject.like("%" +query+ "%"))

我想做这样的查询:

代码语言:javascript
复制
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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-21 07:08:28

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

代码语言:javascript
复制
col_name = 'subject'
db_session.query(Notice).filter(getattr(Notice, col_name).like("%" + query + "%"))
票数 69
EN

Stack Overflow用户

发布于 2018-04-18 01:12:08

在较新的sqlalchemy版本中,应该这样做:

代码语言:javascript
复制
Notice.__table__.c[col_name]

所以:

代码语言:javascript
复制
(db_session
    .query(Notice)
    .filter(Notice.__table__.c[col_name].like("%" + query + "%")
)
票数 9
EN

Stack Overflow用户

发布于 2019-03-04 23:03:41

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

代码语言:javascript
复制
getattr(Notice.columns,col_name)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10251724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档