Я создаю небольшое приложение на основе колб, которое будет принимать файл 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в реальном времени.
расчет передаваемых данных не подлежит сомнению, так как сервер полностью читает файл, а затем начинает загрузку по одной позиции.
Есть другие проверки, выполняемые в кадре данных перед загрузкой, поэтому этот подход для загрузки принят.
Скажите, пожалуйста, есть ли лучший способ сделать это, используя индикатор выполнения/ значения, чтобы показать, сколько элементов загружается, имея возможность выполнять проверку данных перед загрузкой в базу данных.