【问题标题】:Auto Generating SQL Scripts based on User Input using Flask, python使用 Flask、python 根据用户输入自动生成 SQL 脚本
【发布时间】:2020-04-28 06:43:40
【问题描述】:

问题:我们为工作运行了一个艰巨的更新脚本。由于安全问题,更新需要很长时间。我们希望确保我们已正确编辑更新脚本/希望避免所有权限问题。

解决方案: 使用 Flask 作为前端 gui,以消除添加错误值的可能性。 Flask 应用程序将通过自动生成脚本来保证将输入正确放置到更新脚本中,因此我们可以复制并粘贴到 SSMS 中。


我目前遇到的问题是美学。我能够使用用户输入生成烧瓶应用程序并导出 SQL 脚本。问题是,sql 看起来很糟糕,这里是一个输出示例:


理想情况下,输出应该是多行的,就像所有当前的 SQL 脚本一样:

UPDATE table_name
SET ordercomplete = 1
WHERE UserName = 'testuser' and OrderID = 12345

以下是我的文件:


#templates  home.html
<!doctype html>

<head>

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>SQL Auto Generate</title>


    <link rel="stylesheet" href="https://unpkg.com/purecss@0.6.2/build/pure-min.css" integrity="sha384-UQiGfs9ICog+LwheBSRCt1o5cbyKIHbwjWscjemyBMT9YCUMZffs6UqUTd0hObXD" crossorigin="anonymous">

    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">

</head>

<h1>SQL Auto Generate</h1>

<h2>Add the following inputs, select 'Submit' to generate a script for SQL</h2>
<body>

<div class="main">
    <form class="pure-form" method="POST" action="/">
    UserName:<br>
    <input type="text" name="UserName"><br>
    OrderID:<br>
    <input type="number" name="OrderID"><br>
    <button type="submit" class="pure-button pure-button-primary" value="Submit">Submit</button>
    </form>
</div>

<br>

<div class="main">
    {% if UserName %}
        <p>
        {% print('''
        UPDATE table_name
          SET ordercomplete = 1
        WHERE
          UserName = {} and OrderID = {}
      '''.format(UserName, OrderID)) %}
        </p>
    {% endif %}
</div>

</body>

# app.py

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    UserName = ''
    OrderID = ''
    if request.method == 'POST' and 'UserName' in request.form:
        UserName = request.form.get('UserName')
        OrderID = int(request.form.get('OrderID'))

    return render_template("home.html", UserName=UserName, OrderID = OrderID)

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


我也上传到了github:https://github.com/jpf5046/sqlflask

问:有没有更好的方法通过flask创建多行文本输出?

【问题讨论】:

    标签: python sql flask auto-generate


    【解决方案1】:

    默认情况下,HTML 会忽略额外的空格,例如行尾。如果您想完全按照您生成的方式显示查询,请使用&lt;pre&gt;

    <pre>
        UPDATE table_name
          SET ordercomplete = 1
        WHERE
          UserName = {{UserName}} and OrderID = {{OrderId}}
    </pre>
    

    【讨论】:

    • 这非常有效。我没有看到双 {} 而不是 .format(),这是编写这样的应用程序的更好方法吗?
    • 它是 Jinja2 语法的一部分。除了方便之外,它还过滤内容以防止跨站点脚本攻击。
    【解决方案2】:

    我认为你只需要在你的html中添加br标签

    {% if UserName %}
        <p>UPDATE table_name <br>
           SET ordercomplete = 1 <br>
           WHERE <br>
           UserName = {{ UserName }} and OrderID = {{ OrderID }}
        </p>
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多