【问题标题】:'dict' object does not support indexing python flask [duplicate]'dict'对象不支持索引python烧瓶[重复]
【发布时间】:2018-12-14 19:04:08
【问题描述】:

我正在尝试制作一个具有搜索 postgres 表的搜索按钮的网络应用程序。

我收到了错误:

TypeError: 'dict' 对象不支持索引

我的代码如下:

app.py

from flask import Flask, render_template, request
from sqlalchemy import create_engine

app = Flask(__name__)

db_string = "postgres://xi:x@x:5432/xx"

db = create_engine(db_string)

@app.route('/', methods=['GET', 'POST'])
def homepage():
    if request.method == 'POST':
        jn = request.form['jobnumber']
        result_set = db.execute("SELECT cost FROM public.options where optionno = (f'%jn%')").fetchall()
        return render_template('main.html', test=result_set, jn=jn)
    else:
        return render_template('main.html')

    if __name__ == "__main__":
        app.run(debug=True)

我的 HTML 是:

main.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>xxx</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
    <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
</head>

<body>
<p>xxx</p>

<form method="POST" id="jobnumber">
    <input name="jobnumber" type="textbox" placeholder="jobnumber">
</form>

<table> 

<td>
       {{test}}

</td>


</table>

</body>
</html>

任何帮助将不胜感激。

【问题讨论】:

  • 绝对不能使用字符串插值来形成 SQL 查询。

标签: python sqlalchemy


【解决方案1】:

SQLAlchemy 有一个文本函数,用于将字符串转换为 sqlalchemy 文本对象,看起来可以为您正确转义 SQL。

您需要导入 `从 sqlalchemy 导入文本'

您需要从查询中删除 f 并将 = 更改为 likeilike

res = db.execute(text("SELECT cost FROM public.options where optionno like ('%jn%')")).fetchall()

【讨论】:

  • 嗨,Mahesh,感谢您的回复。我现在有一个新问题,我有错误代码:sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) operator does not exist: real ~~ unknown LINE 1: SELECT cost FROM public.options where optionno like ('%jn %'... ^ 提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。[SQL:“SELECT cost FROM public.options where optionno like ('%%jn%% ')"](此错误的背景:sqlalche.me/e/f405)有什么想法吗?
  • 你的 postgresql 数据库中optionno 列的数据类型是什么,如果它是 realinteger 则查询给出错误,optionnocharacter 类型而不是 number
  • 是的 optionno 在 postgres 中输入 'real',它基本上是一个充满数字的列,我正在搜索一个数字
  • 您需要将真实字符转换为您的新查询是db.execute(text("SELECT cost FROM public.options where cast(optionno AS VARCHAR) like ('%jn%')")).fetchall()
  • 感谢 mahesh,它成功了,但它没有返回任何数据,只是 [] 任何想法
猜你喜欢
  • 2016-01-13
  • 2014-04-23
  • 2016-11-30
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 2014-02-03
  • 1970-01-01
相关资源
最近更新 更多