我有一个更有效的搜索问题,我已经用不同的方式做了代码,并没有说服我。我想找一个有三个过滤器的雇员,名字,姓氏和他工作的部门。
视图中的代码如下:
if form.nombre.data == u'' and form.apellido.data == u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(departamento_id=form.departamento.data).all()
elif form.nombre.data == u'' and form.apellido.data != u'' and form.departamento.data == u'':
empleados = db.session.query(Empleado).filter_by(apellido=form.apellido.data.lower()).all()
elif form.nombre.data == u'' and form.apellido.data != u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(apellido=form.apellido.data.lower(),
departamento_id=form.departamento.data).all()
elif form.nombre.data != u'' and form.apellido.data == u'' and form.departamento.data == u'':
empleados = db.session.query(Empleado).filter_by(nombre=form.nombre.data.lower()).all()
elif form.nombre.data != u'' and form.apellido.data == u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(nombre=form.nombre.data.lower(),
departamento_id=form.departamento.data).all()
elif form.nombre.data != u'' and form.apellido.data != u'' and form.departamento.data == u'':
empleados = db.session.query(Empleado).filter_by(nombre=form.nombre.data.lower(), apellido=form.apellido.data.lower()).all()
elif form.nombre.data != u'' and form.apellido.data != u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(nombre= form.nombre.data.lower(), apellido=form.apellido.data.lower(), departamento_id=form.departamento.data).all()
else:
empleados = db.session.query(Empleado).all()
正如你所看到的,这是一个可怕的代码。如果要添加一个过滤器,更多的是16个语句的组合if,更不用说两个以上了。
欢迎任何形式的回复。谢谢你
最佳答案
只需在运行时构建查询,如下所示:
query = db.session.query(Empleado)
if form.nombre.data != '':
query = query.filter_by(nombre=form.nombre.data.lower())
if form.apellido.data != '':
query = query.filter_by(apellido=form.apellido.data.lower())
if form.departamento.data != '':
query = query.filter_by(departamento_id=form.departamento.data)
print query.all()
关于python - Python,SqlAlchemy。如何进行更有效的搜索?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32511237/