带变量的flask postgres动态查询字符串

时间:2018-07-06 08:19:44

标签: python sqlalchemy

我正在尝试使用变量动态查询PostgresSQL表。例如,当用户输入name时,我希望将用户重定向到显示与该name关联的表数据的页面(来自具有该{{1}的数据库表的行) })。我知道我已正确连接到PostgresSQL数据库。

在我的烧瓶 app.py 文件中,我有:

name

在我的 test_index.html 模板中,我有:

@app.route("/test")
def hello():
    html = render_template('test_index.html')
    return html

@app.route("/results")
def goodbye():
    x =  request.args.get('stuff')
    image=sql("SELECT * FROM image WHERE image_id = '%s'" % ({x}))
    html = render_template('test_results.html', target=x, image=image)

    return html

在我的 test_results.html 模板中,我有:

<h1>Hello</h1>
<form action="{{url_for('goodbye')}}" method="get">
  <input type="text" name="stuff" value="type something!">
  <input type="submit" value="Submit">
</form>

输入名称时,出现此错误:

  

ProgrammingError:“ ps”处或附近的(psycopg2.ProgrammingError)语法错误       第1行:SELECT * FROM image WHERE image_id ='set([u'John'...

有没有办法使这种通过字符串动态查询的方法成为可能? 还是我以错误的方式解决此问题? (我必须声明一个模型并以这种方式进行处理吗?)

1 个答案:

答案 0 :(得分:0)

摘自文档:http://docs.sqlalchemy.org/en/latest/orm/session_api.html

您的方法很简单,flask应用程序中的sql语句中只有一个小问题。尝试以下方法:

@app.route("/test")
def hello():
    html = render_template('test_index.html')
    return html

@app.route("/results")
def goodbye():
    x =  request.args.get('stuff')
    image = sql("SELECT * FROM image WHERE image_id=:image_id_input;", 
        {"image_id_input": x})
    html = render_template('test_results.html', target=x, image=image)

    return html

我还假设您将要更新sql查询语句,以仅选择要显示的图像字段。当前,图像将是列表的列表,每个内部列表都是匹配行的列。