You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Flask+PostgreSQL网页查询功能无法正常运行

问题分析与解决方向

你当前的Flask代码存在几处关键错误,导致无法实现姓名查询功能,具体问题和修正方案如下:

一、核心错误点

  • 配置字符串语法错误:f-string中使用双大括号{{}}会转义成单大括号,导致无法正确读取creds模块中的配置值,比如f"{{creds.thisisasecret}}"应该直接写creds.thisisasecret。
  • SQLAlchemy配置项拼写错误:SQLALCHEMY_TRACK_MODIFICATION少了末尾的s,正确名称是SQLALCHEMY_TRACK_MODIFICATIONS,拼写错误会导致配置不生效。
  • 路由未处理查询参数:当前show_details路由仅返回所有数据,没有读取表单提交的姓名参数,也没有执行过滤查询。
  • HTML表单字段名错误:输入框的name="title"与查询逻辑需要的name参数不匹配,导致后端无法获取用户输入的姓名。
  • 模型引用错误:details.query.all()中的details是小写,应该引用定义好的模型类Details。

二、修正后的代码

1. 修正后的app.py

import creds
from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy

# 初始化Flask应用
app = Flask(__name__)
app.config['SECRET_KEY'] = creds.thisisasecret

# 数据库URI配置,直接引用creds变量
app.config['SQLALCHEMY_DATABASE_URI'] = f"postgresql://{creds.username}:{creds.password}@localhost:5432/{creds.database}"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 建议设为False关闭无用的修改追踪
db = SQLAlchemy(app)


class Details(db.Model):
    __tablename__ = 'details'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(length=50))
    email = db.Column(db.String(length=30))


@app.route("/", methods=["GET"])
def show_details():
    # 获取表单提交的name参数,默认空字符串
    search_name = request.args.get('name', '').title()
    # 根据姓名过滤查询,若为空则返回所有数据
    if search_name:
        details = Details.query.filter_by(name=search_name).all()
    else:
        details = Details.query.all()
    return render_template("index.html", details=details)


if __name__ == "__main__":
    app.run(debug=True, host="127.0.0.1", port=3000)

2. 修正后的index.html

<body>
    <div>
        DB Search
    </div>
    <div>
        <form action="{{url_for('show_details')}}" method="GET">
            <input type="text" name="name" placeholder="Enter Name" required>
            <button type="submit">Search</button>
        </form>
    </div>

    <hr/>

    <!-- 展示查询结果 -->
    <div>
        {% if details %}
            <h3>Results:</h3>
            <ul>
                {% for item in details %}
                    <li>ID: {{ item.id }} | Name: {{ item.name }} | Email: {{ item.email }}</li>
                {% endfor %}
            </ul>
        {% else %}
            <p>No matching records found.</p>
        {% endif %}
    </div>
</body>

三、额外注意事项

  • 确保creds.py文件与app.py在同一目录下,且包含thisisasecret、username、password、database这些变量,值要和你的PostgreSQL配置一致。
  • 首次运行前,若数据库表结构有变动,可在Flask的shell中执行db.create_all()同步模型与数据库表(已有details表可跳过此步)。
  • 关闭SQLALCHEMY_TRACK_MODIFICATIONS可避免不必要的性能开销。

内容的提问来源于stack exchange,提问作者themat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:35:18