我正在尝试使用变量动态查询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'...
有没有办法使这种通过字符串动态查询的方法成为可能? 还是我以错误的方式解决此问题? (我必须声明一个模型并以这种方式进行处理吗?)
答案 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查询语句,以仅选择要显示的图像字段。当前,图像将是列表的列表,每个内部列表都是匹配行的列。