gpt4 book ai didi

python - 如何在 sqlalchemy 中将变量作为列名传递?

转载 作者:行者123 更新时间:2023-11-29 10:09:59 25 4
gpt4 key购买 nike

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

    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:类型对象“test_result”没有属性“order_column”

最佳答案

使用getattr

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

关于python - 如何在 sqlalchemy 中将变量作为列名传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51170918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com