Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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迭代request.args_Python_Flask_Flask Sqlalchemy - Fatal编程技术网

Python 简化动态sqlalchemy迭代request.args

Python 简化动态sqlalchemy迭代request.args,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,我很难把这些东西拼在一起。我从表单POST中获取值表单中的name/id是数据库表中的实际列名 这里的想法是过滤级联select2输入,以创建一个动态过滤器。例如,我当前的3个选择名称是字段名称。如果我选择I字段,我只想提供该字段中的名称。如果未选择任何字段,我将提供所有名称(等等)。显然,生产模型将有2个以上 我试图迭代request.args以获取名称和值,然后添加到过滤器中。下面是我的代码 @bp.route('/wells/name') def wells_name(): if

我很难把这些东西拼在一起。我从表单POST中获取值表单中的name/id是数据库表中的实际列名

这里的想法是过滤级联select2输入,以创建一个动态过滤器。例如,我当前的3个选择名称是字段名称。如果我选择I字段,我只想提供该字段中的名称。如果未选择任何字段,我将提供所有名称(等等)。显然,生产模型将有2个以上

我试图迭代request.args以获取名称和值,然后添加到过滤器中。下面是我的代码

@bp.route('/wells/name')
def wells_name():
    if request.args:
        qry = Wells.query
        for var in request.args:
            qry = qry.filter(getattr(Wells, var) == request.args['{}'.format(var)])
        query = qry.with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
    else:
        query = Wells.query.with_entities(Wells.name).group_by(Wells.name) \
            .order_by(Wells.name)
我使用以下代码来获取变量的值

request.args['{}'.format(var)]
以下代码表示Wells.variablename(此场景中的Wells.field或Wells.name)


下面的例子试图“把所有的东西放在一起”。

好的,这个问题肯定不是我所预料的。在过滤迭代之前,我移动了带有_实体的对象,它解决了这个问题。我确信仍然有改进的余地,但比我之前所做的有了很大的改进。这是新代码

@bp.route('/wells/name')
def wells_name():
    if request.args:
        query = Wells.query.with_entities(Wells.field, Wells.name) \
            .group_by(Wells.field, Wells.name).order_by(Wells.name)
        for var in request.args:
            query = query.filter(getattr(Wells, var) \
                .ilike('%{}%'.format(request.args['{}'.format(var)])))
    else:
        query = Wells.query.with_entities(Wells.name).group_by(Wells.name) \
            .order_by(Wells.name)
还有旧代码

@bp.route('/wells/name')
def wells_name():
    if 'field' in request.args and 'name' not in request.args:
        field = request.args['field']
        query = Wells.query.filter(Wells.field.ilike('%{}%'.format(field))) \
            .with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
    elif 'field' not in request.args and 'name' in request.args:
        name = request.args['name']
        query = Wells.query.filter(Wells.name.ilike('%{}%'.format(name))) \
            .with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
    elif 'field' in request.args and 'name' in request.args:
        field = request.args['field']
        name = request.args['name']
        query = Wells.query.filter(Wells.field.ilike('%{}%'.format(field)), \
            Wells.name.ilike('%{}%'.format(name))) \
            .with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
    else:
        query = Wells.query.with_entities(Wells.name).group_by(Wells.name) \
            .order_by(Wells.name)
如果有更多的变量,“旧代码”显然会显著增加,甚至只增加第三个

@bp.route('/wells/name')
def wells_name():
    if 'field' in request.args and 'name' not in request.args:
        field = request.args['field']
        query = Wells.query.filter(Wells.field.ilike('%{}%'.format(field))) \
            .with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
    elif 'field' not in request.args and 'name' in request.args:
        name = request.args['name']
        query = Wells.query.filter(Wells.name.ilike('%{}%'.format(name))) \
            .with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
    elif 'field' in request.args and 'name' in request.args:
        field = request.args['field']
        name = request.args['name']
        query = Wells.query.filter(Wells.field.ilike('%{}%'.format(field)), \
            Wells.name.ilike('%{}%'.format(name))) \
            .with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
    else:
        query = Wells.query.with_entities(Wells.name).group_by(Wells.name) \
            .order_by(Wells.name)