Flask 在搜索期间将SQLAlchemy表列传递给烧瓶路由

Flask 在搜索期间将SQLAlchemy表列传递给烧瓶路由,flask,sqlalchemy,Flask,Sqlalchemy,一般来说,我对Flask和web开发相当陌生,并且正在努力找出如何设置任意列搜索 我的表格: class SearchForm(FlaskForm): choices = [('facilityid', 'facilityid'), ('facilityname', 'facilityname'), ('networkid', 'networkid'), ('contractid', 'contra

一般来说,我对Flask和web开发相当陌生,并且正在努力找出如何设置任意列搜索

我的表格:

class SearchForm(FlaskForm):
    choices = [('facilityid', 'facilityid'),
               ('facilityname', 'facilityname'),
               ('networkid', 'networkid'),
               ('contractid', 'contractid'),
               ('address', 'address')]
    select = SelectField('Search for something', choices=choices)
    id_search = StringField('')
    submit = SubmitField('Search')
我的路线:

@app.route('/results')
def results(search):
    search_string = search.data['id_search']
    search_field = search.data['select']

    # TODO: Remove redundant code
    if search_string == '':
        query = FGymNetworkFacilities.query.order_by(func.rand()).offset(20).limit(10).all()
        table = FacilityTable(query)
        table.border = True
    elif search_field == 'address' and search_field != '':
        query = FGymNetworkFacilities.query.filter(FGymNetworkFacilities.address.like(f'%{search_string}%')).all()
        table = FacilityTable(query)
        table.border = True

    if not results:
        flash('no results!')
        return redirect('/')

    return render_template('facilities.html', table=table)
这个表模型大约有80列,我不想做80个if/else语句。我需要找到一种将列名传递到行的方法(在本例中为
地址

query=FGymNetworkFacilities.query.filter(FGymNetworkFacilities.address.like(f“{search\u string}%”)。all()

但如果有更好的方法,我肯定会接受的。不幸的是,鉴于这个项目的限制,弹性搜索不是我可以实现的,我现在不得不使用这种类型的搜索方法


提前感谢。

,例如,
search\u col=getattr(FGymNetworkFacilities,search\u field)
。在旁注中:
elif search\u field=='address'和search\u field!='':是不必要的复杂
elif search_field==“address”:
将始终具有相同的布尔结果。