使用 SQLAlchemy 查询表单数据的问题
Issues querying form data using SQLAlchemy
我正在尝试做一些非常简单的事情(我是这么想的),但是有几个小时的研究未能解决一些问题。
简单地说,我正在尝试获取 2 个表单数据条目(使用 Flask-WTForms)并查询针对 table 输入的值。一个基本的搜索功能。
我已经设法达到可以看到 SQLAlchemy 运行 A 查询的地步,只是没有任何运气并触发回滚() .
2016-01-27 03:27:39,127 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2016-01-27 03:27:39,128 INFO sqlalchemy.engine.base.Engine SELECT "Motor"."Asset Tag" AS "Motor_Asset Tag", "Motor"."Horsepower" AS "Motor_Horsepower"
FROM "Motor"
WHERE "Motor"."Asset Tag" AND "Motor"."Horsepower"
2016-01-27 03:27:39,128 INFO sqlalchemy.engine.base.Engine {}
2016-01-27 03:27:39,129 INFO sqlalchemy.engine.base.Engine ROLLBACK
这里有一些代码片段。
查看:
@app.route('/searchassets', methods=['GET', 'POST'])
def searchassets():
form = SearchAssetsForm()
results = None
if request.method == "POST":
try:
asset_tag = form.asset_search.data
horsepower = form.horsepower_search.data
results = Motor.query.filter(Motor.asset_tag, Motor.horsepower).all()
except:
db.session.rollback()
flash("Error.")
return render_template('searchassets.html', form=form, results=results)
return render_template('searchassets.html', form=form, results=results)
表单模型:
class SearchAssetsForm(Form):
asset_search = StringField('asset_search')
horsepower_search = IntegerField('horsepower_search')
模板:
{% extends "basehead.html" %}
{% block content %}
<center>
<br>
<div class="container">
<h1>Search Asset Attributes Below</h1>
<br>
<form action="" method="post" name="submit">
{{ form.hidden_tag() }}
<p>
{{ form.asset_search(placeholder=" Enter Asset Tag") }}
</p>
<p>
{{ form.horsepower_search(placeholder=" Enter Horsepower") }}
</p>
<input class="btn btn-default" type="submit" value="Submit">
</form>
<br>
<table>
<th> </th>
<th>Asset Tag</th>
<th>Horsepower</th>
<tr>
<td>{% print(results.asset_tag) %}</td>
<td>{% print(results.horsepower) %}</td>
</tr>
</table>
</center>
{% endblock %}
好吧,你有一个 裸 except
子句 使调试成为猜谜游戏。至少,暂时删除它并查看实际错误是什么。或者,记录异常和回溯。
我认为你没有正确使用 filter()
中的检查,应该不是:
Motor.query.filter(Motor.asset_tag == asset_tag,
Motor.horsepower == horsepower).all()
或者,如果你想要 filter_by()
:
Motor.query.filter(asset_tag=asset_tag,
horsepower=horsepower).all()
我正在尝试做一些非常简单的事情(我是这么想的),但是有几个小时的研究未能解决一些问题。
简单地说,我正在尝试获取 2 个表单数据条目(使用 Flask-WTForms)并查询针对 table 输入的值。一个基本的搜索功能。
我已经设法达到可以看到 SQLAlchemy 运行 A 查询的地步,只是没有任何运气并触发回滚() .
2016-01-27 03:27:39,127 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2016-01-27 03:27:39,128 INFO sqlalchemy.engine.base.Engine SELECT "Motor"."Asset Tag" AS "Motor_Asset Tag", "Motor"."Horsepower" AS "Motor_Horsepower"
FROM "Motor"
WHERE "Motor"."Asset Tag" AND "Motor"."Horsepower"
2016-01-27 03:27:39,128 INFO sqlalchemy.engine.base.Engine {}
2016-01-27 03:27:39,129 INFO sqlalchemy.engine.base.Engine ROLLBACK
这里有一些代码片段。
查看:
@app.route('/searchassets', methods=['GET', 'POST'])
def searchassets():
form = SearchAssetsForm()
results = None
if request.method == "POST":
try:
asset_tag = form.asset_search.data
horsepower = form.horsepower_search.data
results = Motor.query.filter(Motor.asset_tag, Motor.horsepower).all()
except:
db.session.rollback()
flash("Error.")
return render_template('searchassets.html', form=form, results=results)
return render_template('searchassets.html', form=form, results=results)
表单模型:
class SearchAssetsForm(Form):
asset_search = StringField('asset_search')
horsepower_search = IntegerField('horsepower_search')
模板:
{% extends "basehead.html" %}
{% block content %}
<center>
<br>
<div class="container">
<h1>Search Asset Attributes Below</h1>
<br>
<form action="" method="post" name="submit">
{{ form.hidden_tag() }}
<p>
{{ form.asset_search(placeholder=" Enter Asset Tag") }}
</p>
<p>
{{ form.horsepower_search(placeholder=" Enter Horsepower") }}
</p>
<input class="btn btn-default" type="submit" value="Submit">
</form>
<br>
<table>
<th> </th>
<th>Asset Tag</th>
<th>Horsepower</th>
<tr>
<td>{% print(results.asset_tag) %}</td>
<td>{% print(results.horsepower) %}</td>
</tr>
</table>
</center>
{% endblock %}
好吧,你有一个 裸 except
子句 使调试成为猜谜游戏。至少,暂时删除它并查看实际错误是什么。或者,记录异常和回溯。
我认为你没有正确使用 filter()
中的检查,应该不是:
Motor.query.filter(Motor.asset_tag == asset_tag,
Motor.horsepower == horsepower).all()
或者,如果你想要 filter_by()
:
Motor.query.filter(asset_tag=asset_tag,
horsepower=horsepower).all()