Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,SqlAlchemy。如何进行更有效的搜索?_Python_Sql_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python,SqlAlchemy。如何进行更有效的搜索?

Python,SqlAlchemy。如何进行更有效的搜索?,python,sql,sqlalchemy,flask-sqlalchemy,Python,Sql,Sqlalchemy,Flask Sqlalchemy,我有一个更有效的搜索问题,我用不同的方式编写代码,但不能说服我。我想找一个有三个过滤器的员工,名字,姓氏和他工作的部门 视图中的代码如下所示: 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

我有一个更有效的搜索问题,我用不同的方式编写代码,但不能说服我。我想找一个有三个过滤器的员工,名字,姓氏和他工作的部门

视图中的代码如下所示:

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条语句的组合,更不用说两条了


欢迎任何类型的回复。谢谢

只需在运行时构建查询,例如:

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()

您可能需要使用或或和过滤器。比如:

from sqlalchemy import or_
filter(or_(User.name == 'ed', User.name == 'wendy'))

另请参见和此。

谢谢您的帮助:D