首页 > 解决方案 > 在搜索期间将 SQLAlchemy 表列传递给 Flask 路由

问题描述

总的来说,我对 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语句。我需要找到一种将列名传递给行的方法(在本例中address

query = FGymNetworkFacilities.query.filter(FGymNetworkFacilities.address.like(f'%{search_string}%')).all()

但如果有更好的方法来做到这一点,我绝对愿意接受。不幸的是,考虑到这个项目的限制,我无法实现 Elastic Search,现在我不得不使用这种类型的搜索方法。

提前致谢。

标签: flasksqlalchemy

解决方案


推荐阅读