我有这个型号:
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))
答案 0 :(得分:1)
以下是使用filter_by
和keyword argument unpacking的方法:
keyword = {unique_by_param : 1}
session.query(PUC).filter_by(**keyword).all()