Автоматическое создание SQL сценариев на основе пользовательского ввода с использованием Flask, python - PullRequest
0 голосов
/ 10 января 2020

Проблема: Существует скрипт обновления трудный , который мы запускаем для работы. Обновление занимает много времени из-за проблем безопасности. Мы хотим убедиться, что мы правильно отредактировали скрипт обновления / хотим избежать всех проблем с разрешениями.

Решение: Использование Flask в качестве внешнего интерфейса gui, чтобы исключить возможность добавления неправильного значения. Приложение Flask гарантирует правильное размещение входных данных в скрипте обновления, автоматически генерируя скрипт, поэтому мы можем просто скопировать и вставить его в SSMS.


Текущая проблема, с которой я сталкиваюсь - это эстетика. Я смог сгенерировать приложение flask, используя пользовательский ввод, и экспортировал скрипт SQL. Проблема в том, что sql выглядит ужасно, вот пример вывода: enter image description here


В идеале, вывод будет многострочным, как и все текущие 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?

Ответы [ 2 ]

2 голосов
/ 10 января 2020

По умолчанию HTML игнорирует лишние пробелы, такие как окончания строк. Если вы хотите отобразить запрос в точности так, как вы его создали, используйте <pre>:

<code><pre>
    UPDATE table_name
      SET ordercomplete = 1
    WHERE
      UserName = {{UserName}} and OrderID = {{OrderId}}
0 голосов
/ 10 января 2020

Я думаю, вам просто нужно добавить br теги в html

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

...