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表单。