Flask和Python如何从mysql数据库中创建数据搜索引擎

Flask和Python如何从mysql数据库中创建数据搜索引擎,python,mysql,flask,Python,Mysql,Flask,我想通过在html输入字段中输入学生的名字来为学生的信息创建某种搜索引擎,但我的代码有一些问题。不过,我正在使用Flask和Python。 以下是我的project.py代码: @app.route('/search', methods=['GET', 'POST']) def search(): if request.method == "POST": db = MySQLdb.connect(user="root", passwd="", db="cs324", ho

我想通过在html输入字段中输入学生的名字来为学生的信息创建某种搜索引擎,但我的代码有一些问题。不过,我正在使用Flask和Python。 以下是我的project.py代码:

@app.route('/search', methods=['GET', 'POST'])
def search():
    if request.method == "POST":
        db = MySQLdb.connect(user="root", passwd="", db="cs324", host="127.0.0.1")
        c=db.cursor()
        c.executemany('''select * from student where name = %s''', request.form['search'])
        for r in c.fetchall():
            print r[0],r[1],r[2]
            return redirect(url_for('search'))
    return render_template('search.html')
以下是我的search.html代码:

{% extends "hello.html" %}
{% block content %}
<div class="search">
<form action="" method=post>
    <input type=text name=search value="{{ request.form.search}}"></br>
    <div class="actions"><input type=submit value="Search"></div>
</form>
</div>
{% for message in get_flashed_messages() %}
<div class=flash>
    {{ message }}
</div>
{% endfor %}
{% endblock %}
{%extensed“hello.html”%}
{%block content%}

{get_Flash_messages()%中的消息为%s} {{message}} {%endfor%} {%endblock%}
当我点击“搜索”按钮时,什么也没发生,我检查了数据库,其中有一些数据,所以它不是空的,我找不到哪里出错,请帮助?

确保,操作指向正确的url 我认为您在提交表单时使用了错误的
操作

您的版本使用的是
action=“
,我猜应该是
action=“/search”

因此,您的模板应更改为:

{% extends "hello.html" %}
{% block content %}
<div class="search">
<form action="/search" method=post>
    <input type=text name=search value="{{ request.form.search}}"></br>
    <div class="actions"><input type=submit value="Search"></div>
</form>
</div>
{% for message in get_flashed_messages() %}
<div class=flash>
    {{ message }}
</div>
{% endfor %}
{% endblock %}
是否为最终报告呈现模板 您的代码不会在POST分支中显示任何试图呈现您在数据库中找到的内容的尝试

您应该调用
render\u template()

像这样的

@app.route('/search', methods=['GET', 'POST'])
def search():
    if request.method == "POST":
        db = MySQLdb.connect(user="root", passwd="", db="cs324", host="127.0.0.1")
        c=db.cursor()
        c.executemany('''select * from student where name = %s''', request.form['search'])
        return render_template("results.html", records=c.fetchall())
    return render_template('search.html')

您是否检查了浏览器的错误控制台?如果在地址栏中键入
/search
,会发生什么情况?是的,我甚至尝试过放置app.run(debug=True),但它没有显示任何内容,看起来它只是刷新search.html页面。@SrdjanRistic当您单击按钮时,您在web应用访问日志中看到任何条目吗?它声明了什么url?然后,如果它点击了你期望的url,它会显示:就是这样。当我删除重定向到搜索页面时,它仍然会这样做……我建议您不要在视图中使用与连接相关的人员,而是为db connection创建一个单独的方法,并在应用程序生命周期中保留它,并且您可以使用flask sqlalchemy来处理与数据库相关的问题matters@SrdjanRistic我扩展了我的回答,还有另外两个问题-您从第一次
迭代中创建的内容重定向出去。你还忘了在发帖返回时呈现结果页面。为什么
request.form()
采用“搜索”而不是“/search”?@Pyderman因为有两个概念,一个是url上的路径(
“/search”
),另一个是要填入表单的默认值(这是
request.form.search
)。这些概念有不同的含义,不能混用。
@app.route('/search', methods=['GET', 'POST'])
def search():
    if request.method == "POST":
        db = MySQLdb.connect(user="root", passwd="", db="cs324", host="127.0.0.1")
        c=db.cursor()
        c.executemany('''select * from student where name = %s''', request.form['search'])
        return render_template("results.html", records=c.fetchall())
    return render_template('search.html')