индикатор загрузки для загрузки Excel в MySQL с помощью колбы - PullRequest
0 голосов
/ 28 октября 2019

Я создаю небольшое приложение на основе колб, которое будет принимать файл Excel в качестве входных данных от пользователя, преобразовывать его в файл данных pandas и выгружать его построчно в таблицу mysql. Внешний интерфейс и бэкэнд уже созданы, но теперь мне нужно добавить индикатор загрузки к загрузке файла, я не уверен в необходимой технологии (будь то AJAX. Javascript), так как я немного новичок в колбе, но мне удалосьчтобы завершить это далеко.

Теперь я могу вернуть общее количество загруженных и сбойных строк и т. Д. В конце, используя инструкцию return в определении python, но мне нужно показать динамический прогресс, используя номер обрабатываемой позициии общее количество позиций в файле Excel.

python:

@app.route('/upload', methods=['POST','GET'])
def upload_file():
    import pandas as pd
    import sys

    f = request.files['file']
    df = pd.read_excel(f)
    df["Upload Status"] = " "
    df["Error Details"] = " "
    conn = MySQLdb.connect("HOST","user","pwd","dbname" )
    cursor = conn.cursor()
    pass_num = 0
    fail_num = 0
    for i in range(0,len(df)):
        try:
            cursor = conn.cursor()
            query = "INSERT INTO dbname.tablename"
            query = query + " (xx) VALUES " + df.iloc[i,"xx"]
            cursor.execute(query)
            df.at[i,"Upload Status"] = "Success"
            df.at[i,"Error Details"] = "No error"
            conn.commit()
            pass_num = pass_num +1
            print("Pass: " + str(pass_num) + " " + "Fail: " + str(fail_num))
        except:
            df.at[i,"Upload Status"] = sys.exc_info()[0]
            df.at[i,"Error Details"] = sys.exc_info()[1]
            fail_num = fail_num +1
            print("Pass: " + str(pass_num) + " " + "Fail: " + str(fail_num))
            print(sys.exc_info()[1])
    conn.commit()
    df.to_excel("C:\\Users\\" + username + "\\Downloads\\upload_status.xlsx")
    sub = df[df['Upload Status']!="Success"]
    tuples = list(sub.itertuples(index=False, name=None))
    return render_template("upload_status.html", value=tuples, pass = pass_num, fail = fail_num )

html (index.html):

    <form action = "/upload" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "file" />
         <input type = "submit" name="submit" value="submit"/>
    </form>

html: upload_status.html:

p> </p>
<p>pass {{pass_num}}</p>
<p>fail {{fail_num}}</p>

<p> </p>

Теперь я хочу включить простой индикатор выполнения, или было бы достаточно, если бы я мог показать количество загружаемых строк либо из переменной pass_num, либо из самого i в HTMLв реальном времени.

расчет передаваемых данных не подлежит сомнению, так как сервер полностью читает файл, а затем начинает загрузку по одной позиции.

Есть другие проверки, выполняемые в кадре данных перед загрузкой, поэтому этот подход для загрузки принят.

Скажите, пожалуйста, есть ли лучший способ сделать это, используя индикатор выполнения/ значения, чтобы показать, сколько элементов загружается, имея возможность выполнять проверку данных перед загрузкой в ​​базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...