因此,我使用以下代码根据 Flask 中的用户输入构建查询:
if empty_indic_form.validate_on_submit():
query='select name, year, value, display_name from literal inner join ent on ent_id=ent.id where display_name in ('
for i in indic_form.indicators.data:
query=query+'\''+i+'\','
query=query[:-1]+') '
query=query+'and name in ('
for c in order_c:
query=query+c+','
query=query[:-1]+')'
data_return=db.engine.execute(query).fetchall()
我已经确认该查询看起来像它应该的那样,甚至有一个早期的会话,它返回了我所期望的 rowproxy 对象列表。但现在无论我做什么我都会收到此错误!
我已将查询设置为模板中的变量,以便可以将其打印出来,这是我得到的:
select name, year, value, display_name from literal
inner join ent
on ent_id=ent.id
where display_name in ('Energy savings of primary energy (TJ)','Adolescent birth rate (women aged 15-19 years)','Net migration rate','Transmission and distribution losses (%)')
and name in ('Burkina Faso', 'Ghana', 'Saudi Arabia', 'Pakistan')
我直接在 Postgres DB 上运行它,结果非常好。
在错误转储中我注意到data_return=db.engine.execute(query).fetchall()
line 正在使用空字典作为参数进行构建,这当然最终会引发该错误。我可以强迫它不要这样做吗?查询对象看起来和上面的一样,现在有什么问题吗?我是否应该在刷新页面或转到主页时终止数据库会话?