【问题标题】:How to take HTML user input and query it via Python & SQL?如何获取 HTML 用户输入并通过 Python 和 SQL 进行查询?
【发布时间】:2018-05-09 11:10:19
【问题描述】:

有没有办法从 HTML 中获取用户输入,并使用 python 将输入运行到 SQL 数据库?输入需要解析吗?我希望用户能够输入商店名称,并让它返回相关行

def search():
    store_search = request.form.get("store")
    if request.method == "POST":
        if not store_search:
            return "please type in a store!"
        else:
            c = conn.cursor()
            c.execute("SELECT * FROM stores WHERE store_name= 'store_search'")
            rows = c.fetchall()
            for eachRow in rows:
                return row
    else:
return render_template("search.html")

HTML:

{% extends "main_page.html" %}
{% block title %}
Search
{% endblock %}

{% block main %}
    <form action="{{ url_for('search') }}" method="post">
        <fieldset>
            <div class="form-group">
                <input autocomplete="off" autofocus class="form-control" 
                 name="store" placeholder="store" type="text"/>
            </div>
            <div class="form-group">
                <button class="btn btn-default" type="submit">search</button>
            </div>
            <div class="page-header">
                <h1>{{ store }}</h1>
            </div>
        </fieldset>
    </form>
{% endblock %}

【问题讨论】:

    标签: python html sql django


    【解决方案1】:

    您可以在flask 中创建一个简单的应用程序,该应用程序接收用户输入并扫描从sqlite3 中的SELECT 查询返回的项目:

    首先,创建用户表单。您可以将 ajax 与 jquery 一起使用以获得动态响应:

    search.html:

    <html>
     <head>
       <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
     </head>
     <body> 
        <input type='text' name='query' id='query'>
        <button type='button' id='search'>Search</button>
        <div id='results'></div>
     </body>
      <script> 
        $(document).ready(function() {
         $('#search').click(function() {
           var text = $('#query').val();
            $.ajax({
            url: "/search",
            type: "get",
            data: {query: text},
            success: function(response) {
            $("#results").html(response.html);
           },
           error: function(xhr) {
            //Do Something to handle error
           }
         });
       });
      });
      </script>
    </html>
    

    app.py

    import flask
    import sqlite3
    app = flask.Flask(__name__)
    
    @app.route('/')
    def home():
      return "<a href='/search'>Search</a>"
    
    @app.route('/search')
    def search():
       term = flask.request.args.get('query')
       possibilities = [i for [i] in sqlite3.connect('filename.db').cursor().execute("SELECT * FROM stores") if term.lower() in i.lower()]
       return flask.jsonify({'html':'<p>No results found</p>' if not possibilities else '<ul>\n{}</ul>'.format('\n'.join('<li>{}</li>'.format(i) for i in possibilities))})
    

    【讨论】:

    • 非常感谢!!这也适用于 MySQL 吗?
    • @Emily 很高兴为您提供帮助!它将与MySql 一起工作,您需要做的就是连接到在您的服务器上运行的数据库,然后运行类似于sqlite3INSERTSELECT 查询。见herehere
    • 再次感谢您!最后一个问题,如何在#results div 中显示过滤后的行?
    • @Emily 上面的代码完成了该任务。在路由中,创建了一个简单列表,该列表作为 jsonified 对象传递给 ajax 响应函数。让我知道这是如何工作的。
    • @Ajax1234 你好 :) 你如何结合 html 和 python 脚本?如果我运行 python 脚本不会给我错误,但是当我激活网页时,它不会从数据库中给出任何结果。我使用的是 PostgreSQL 而不是 sqlite3。请帮忙。
    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2016-08-06
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多