Python Flask搜索MySQL数据库出现()

Python Flask搜索MySQL数据库出现(),python,mysql,database,search,flask,Python,Mysql,Database,Search,Flask,我已经在Python Flask应用程序上工作了一段时间了。我已经让它连接到mysql数据库并进行搜索,但它抛出的只是() 我不确定它是否找不到任何东西或有错误,但数据库中有一项 这是主.py文件 from flask import Flask, render_template, request, url_for, redirect, flash from connect_script import connection app = Flask(__name__) @app.route("/

我已经在Python Flask应用程序上工作了一段时间了。我已经让它连接到mysql数据库并进行搜索,但它抛出的只是()

我不确定它是否找不到任何东西或有错误,但数据库中有一项

这是主.py文件

from flask import Flask, render_template, request, url_for, redirect, flash
from connect_script import connection

app = Flask(__name__)

@app.route("/")
def homepage():
    flash("Hello")
    return render_template("main.html")


@app.route('/hello/', methods=['POST'])
def hello():
    error = ""
    rows = None
    user_input = None
    data = None
    try:
        c, conn = connection()
        if request.method == "POST":
            data = c.execute("SELECT * FROM titles WHERE name='%s' ", (request.form["search"],))
            user_input = (request.form["search"],)
            return render_template("main.html", data=data, user_input=user_input)

    except Exception as e:
        error = (str(e))
        return render_template("main.html", error=error, user_input=user_input)


if __name__ == "__main__":
    app.run(debug=True)
这个文件搜索数据库,只调出results.html,看起来像

<!DOCTYPE html>
<html land="en">

<head>
    <meta charset="utf-8">
    <title>Movie App</title>
    <link href="{{ url_for('static', filename='css/style.css') }}" />
    <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>
    {{ rows }}
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>

</html>

电影应用
{{rows}}
其中{{rows}}是它所呈现的全部内容()而不是其他内容。我一直在网上搜索,试图找到答案,但到目前为止一无所获

正在使用的表单如下所示

  <form class="navbar-form navbar-left" action="{{ url_for('hello') }}" method="POST" role="search">
    <div class="form-group">
      <input type="text" class="form-control" placeholder="Search" name="search" value="{{ request.form.search }}">
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
  </form>

提交

谢谢你的帮助

您至少要遍历光标

<ol>
    {% for row in rows %}
        <li> row data: {{ row }}</li>
    {% endfor %}
</ol>

您至少需要遍历光标

<ol>
    {% for row in rows %}
        <li> row data: {{ row }}</li>
    {% endfor %}
</ol>

所以再过几个小时,我终于做到了。我并不是百分之百地理解错在哪里

但我最后的代码是

@app.route('/hello/', methods=['POST'])
def hello():
    error = ""
    rows = None
    user_input = None
    data = None
    try:
        c, conn = connection()
        if request.method == "POST":
            c.execute("SELECT * FROM titles WHERE name = %s ", (request.form["search"],))
            data = c.fetchall()
            user_input = (request.form["search"],)
            return render_template("results.html", data=data, user_input=user_input)

    except Exception as e:
        error = (str(e))
        return render_template("main.html", error=error, user_input=user_input)
所以我相信这是在做,我错的地方是,在Flask连接到数据库并且用户发出了搜索请求之后。MySQL执行行“
SELECT*FROM titles WHERE name=%s
”,因此这行使用
请求选择表
title
中的所有行。表单[“search”]
用用户搜索的内容替换
%s
。我不知道的是,c.execute需要一个列表或元组作为它的第二个参数。在请求和周围使用()会变成这样

最后,我将数据存储到arg数据和fetchall中,然后使用
{{data}
和for循环将其输出到HTML


非常感谢bakkal帮我找到答案

再过几个小时,我终于做到了。我并不是百分之百地理解错在哪里

但我最后的代码是

@app.route('/hello/', methods=['POST'])
def hello():
    error = ""
    rows = None
    user_input = None
    data = None
    try:
        c, conn = connection()
        if request.method == "POST":
            c.execute("SELECT * FROM titles WHERE name = %s ", (request.form["search"],))
            data = c.fetchall()
            user_input = (request.form["search"],)
            return render_template("results.html", data=data, user_input=user_input)

    except Exception as e:
        error = (str(e))
        return render_template("main.html", error=error, user_input=user_input)
所以我相信这是在做,我错的地方是,在Flask连接到数据库并且用户发出了搜索请求之后。MySQL执行行“
SELECT*FROM titles WHERE name=%s
”,因此这行使用
请求选择表
title
中的所有行。表单[“search”]
用用户搜索的内容替换
%s
。我不知道的是,c.execute需要一个列表或元组作为它的第二个参数。在请求和周围使用()会变成这样

最后,我将数据存储到arg数据和fetchall中,然后使用
{{data}
和for循环将其输出到HTML


非常感谢bakkal帮我找到答案

对不起,花了这么长时间,我想这是排的对不起,花了这么长时间,我想这是排的谢谢你的帮助,但是结果页面现在什么都没有了。我已将其添加到python脚本“c,conn=connection()cursor=c.cursor(dictionary=True)cursor.executemany(“'SELECT*FROM titles WHERE name=%s'”,request.form['search'])cursor.executemany=行返回呈现模板(“results.html”,rows=rows),并使用您的{%for rows%}{{row}{%endfor%}我不确定我使用的是MySQL的Dict,对吗?抱歉,如果这很难阅读,还是什么都没有,所以搜索没有结果。我非常确定我的连接是正确的,我会尝试其他一些连接方式来确保,它是从另一个脚本中提取连接。对不起,花了这么长时间,我犯了一个愚蠢的错误,所以我选择了sed count=cursor.execute(''SELECT count(*)FROM titles WHERE name'')[0];和{{count}在html中,但它仍然没有输出任何内容。链接到站点,不确定这有多大帮助吗?因此,在使用它之后,它现在只显示“无”,因此我猜它在数据库中找不到任何内容?感谢您的帮助,但结果页现在没有结果。我已将此添加到python脚本中'c,conn=connection()cursor=c.cursor(dictionary=True)cursor.executemany('SELECT*FROM titles WHERE name=%s',request.form['search'])cursor.executemany=rows return render_模板(“results.html”,rows=rows)”,并将{%用于rows%}{{row}}{%endfor%}我不确定我使用的是MySQL的Dict,对吗?抱歉,如果这很难阅读,还是什么都没有,所以搜索没有结果。我非常确定我的连接是正确的,我会尝试其他一些连接方式来确保,它是从另一个脚本中提取连接。对不起,花了这么长时间,我犯了一个愚蠢的错误,所以我选择了sed count=cursor.execute(''SELECT count(*)FROM titles WHERE name'')[0];和{{count}在html中,但它仍然没有输出任何内容。链接到该站点,不确定这有多大帮助吗?因此,在使用它之后,它现在只会说没有,所以我猜它在数据库中找不到任何内容?