【问题标题】:How do you pass a variable as a column name in sqlalchemy? [duplicate]如何在 sqlalchemy 中将变量作为列名传递? [复制]
【发布时间】:2018-07-04 20:17:24
【问题描述】:

我最近创建了一个脚本,它允许用户过滤表,然后将剩余的列按升序和降序排序。这是我写的:

    if 'desc' in request.form:
        if request.form['desc'] == 'date_time':
            display_test_results = test_result.query.order_by(desc(test_result.date_time)).filter(or_(test_result.date_time.like('%' +global_value_detailed+ '%'),                                                          
                                                    test_result.place_of_test.like('%' +global_value_detailed+ '%'),
                                                    test_result.part_number.like('%' +global_value_detailed+ '%'),
                                                    test_result.serial_number.like('%' +global_value_detailed+ '%'),
                                                    test_result.test_details.like('%' +global_value_detailed+ '%'),
                                                    test_result.result.like('%' +global_value_detailed+ '%')))

            return render_template('/detailed_test_data.html', title='Database Full', display_test_results=display_test_results)

        elif request.form['desc'] == 'part_number':

然后对我的所有列重复此操作,这里的问题是我有 17 列(本示例中并未使用所有列。)所以为了使升序和降序排序正常工作,我有 34 批代码占 900 行.这是大量的代码,会降低我的搜索/排序功能的效率(我想。)

有没有使用精炼代码的方法,将 request.form['desc'] 值保存为变量,然后该变量用于告诉查询要查看哪一列?我认为它最终看起来类似于下面的代码。但是当我运行这段代码时,我得到下面的错误引用。

 if request.form['desc'] != '':
                    order_column = request.form['desc']

                    display_test_results = test_result.query.order_by(desc(test_result.order_column)).filter(or_(test_result.date_time.like('%' +global_value_primary+ '%'),
                                                                                                            test_result.place_of_test.like('%' +global_value_primary+ '%'),
                                                                                                            test_result.serial_number.like('%' +global_value_primary+ '%'),
                                                                                                            test_result.result.like('%' +global_value_primary+ '%'))).filter(test_result.test_details=='Overall').all()
                    return render_template('/primary_test_data.html', title='', display_test_results=display_test_results)

 elif request.form['asc'] != '':
                    order_column = request.form['asc'] ... 

AttributeError: type object 'test_result' 没有属性 'order_column'

【问题讨论】:

    标签: python mysql flask sqlalchemy


    【解决方案1】:

    使用getattr

    .order_by(desc(getattr(test_result, request.form['desc'])))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 2017-08-15
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2019-08-10
      相关资源
      最近更新 更多