Flask 在搜索期间将SQLAlchemy表列传递给烧瓶路由
一般来说,我对Flask和web开发相当陌生,并且正在努力找出如何设置任意列搜索 我的表格:Flask 在搜索期间将SQLAlchemy表列传递给烧瓶路由,flask,sqlalchemy,Flask,Sqlalchemy,一般来说,我对Flask和web开发相当陌生,并且正在努力找出如何设置任意列搜索 我的表格: class SearchForm(FlaskForm): choices = [('facilityid', 'facilityid'), ('facilityname', 'facilityname'), ('networkid', 'networkid'), ('contractid', 'contra
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”:
将始终具有相同的布尔结果。