Python SQLAlchemy在不同的列上动态筛选?
我有一个下拉列表,用户可以在其中选择不同的社会经济状态,但是,状态是独立的布尔列,如何基于选择不同的列动态构建查询 例如,如果我有一个名为Python SQLAlchemy在不同的列上动态筛选?,python,sqlalchemy,Python,Sqlalchemy,我有一个下拉列表,用户可以在其中选择不同的社会经济状态,但是,状态是独立的布尔列,如何基于选择不同的列动态构建查询 例如,如果我有一个名为SamPublicData的模型和Women\u owned,Veterman\u owned类型为boolean(Postgres)的列 假设我有一个下拉选择框,上面有“女性所有”、“退伍军人所有”: 现在我有: socio = request.form['socio'] if socio == 'Woman Owned': SamPublicDat
SamPublicData
的模型和Women\u owned
,Veterman\u owned
类型为boolean
(Postgres)的列
假设我有一个下拉选择框,上面有“女性所有”、“退伍军人所有”:
现在我有:
socio = request.form['socio']
if socio == 'Woman Owned':
SamPublicData.query.filter(SamePublicData.woman_owned.is_(True))
elif socio == 'Veteran Owned':
SamPublicData.query.filter(SamePublicData.veteran_owned.is_(True))
这不是很有效,有没有办法动态选择筛选列?我做的一件事是使用getattr内置。您可以尝试以下方法:
# map the string to the attribute name
def map_to_column_name(s):
return '_'.join(s.lower().split(' '))
socio = request.form['socio']
SamPublicData.query.filter(getattr(SamePublicData, map_to_column_name(socio)).is_(True))
这可能行得通,我实际上要切换到wtf表单,选项是一个元组,所以我可以像
choices=[('Woman Owned',Woman_Owned),…]那样构建元组,然后像那样映射它?@spitfiredd是的,但是你可以映射(我会把元组列表变成映射字典),但是解决方案的核心是getattr(Object,attribute)
。不过,您可以使用一个可行的属性名。我只需要执行.filter(getattr(samepublicata,form.social.data).is_uz(True))
直接将元组列表转换为dict,这是使用wtf表单。