使用SQLAlchemy查询表单数据的问题

时间:2016-01-27 03:42:09

标签: python flask sqlalchemy jinja2 flask-wtforms

我试图做一些非常简单的事情(所以我想),但是在几个小时的研究中遇到一些问题却未能解决。

简单地说,我试图获取2个表单数据条目(使用Flask-WTForms)并查询针对表格输入的值。基本搜索功能。

我设法让我看到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 %}

1 个答案:

答案 0 :(得分:1)

嗯,你有一个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()