我可以在SQLAlchemy上进行动态比较吗?

时间:2016-08-08 21:40:21

标签: python sqlalchemy

我有这个型号:

class PUC(Base):
   pucId = Column(Integer, primary_key=True)
   asset = Column(TINYINT)
   article = Column(TINYINT)
   more values ...
   more values ...

我需要动态地进行查询(这样我试过):

pucs = session.query(PUC).filter(PUC[unique_by_param] == 1).all()

unique_by_param的值来自前端。 unique_by_param的一个示例是:{str}'asset'{str}'article'{str}'another_model_value'

我真正需要的是一种方法。 动态地session.query(PUC).filter(PUC.asset == 1)session.query(PUC).filter(PUC.article == 1),就像我尝试的第一种方式一样。

使用(PUC[unique_by_param])的结果是TypeError: 'DeclarativeMeta' object is not subscriptable

我之前使用过一种方法,但这种做法并不是很好的方法,但这不是很好的方法:

# this is a accounting table, so this have around 250 columns 
#and this special columns be around 70 variables... 
#So this isn't an option o do this.
if unique_by_param == 'asset':
    q = (PUC.asset == 1)
elif unique_by_param == 'article':
    q = (PUC.article)
elif ...more values:

pucs = session.query(PUC).filter(or_(*q))

1 个答案:

答案 0 :(得分:1)

以下是使用filter_bykeyword argument unpacking的方法:

keyword = {unique_by_param : 1}
session.query(PUC).filter_by(**keyword).all()