作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在更有效的搜索方面遇到了问题,我用不同的方式编写了代码,但没有说服我。我正在尝试使用三个过滤器查找一名员工:姓名、姓氏和他工作的部门。
View 中的代码如下:
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()
如您所见,这是一个可怕的代码。如果您要添加一个过滤器,则 more 将是 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,SQLAlchemy。如何进行更高效的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32511237/
我是一名优秀的程序员,十分优秀!