第一阶段大作业 文件上传格式

用户可以自己定义文件上传的格式

@app.route('/import_data', methods=['POST', 'GET'])
def import_data():
    #用户
    user_id=session['user_id']
    #设置flag以确定是否写入成功
    flag=0;
    #返回码含义:0上传失败,1上传成功,2上传类型不符,但是还会上传,传到test_data,3文件名重复已覆盖,4文件名重复以追加5填写格式
    #获取文件
    the_file = request.files.get("file")
    # 判断文件类型
    file_type=the_file.filename.split(".")[1]
    file_name=the_file.filename.split(".")[0]
    file_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    file_data = fileroot.find_filedata_filename(file_name)
    #判断格式是否设置
    if(china_row_0==english_row_0==unit_row_0==0):#判断文件格式是否填写
        return jsonify({"code": 5, "msg": "", "data": ""})
    else:#填写后根据文件类型上传
        #使用全局变量
        china_row_flag=china_row_0
        english_row_flag =  english_row_0
        unit_row_flag = unit_row_0
        type_flag=type_0
        flag_came=0#判断文件是否重复
        if(fileroot.find_filedata_filename(file_name)==()):
            flag_came=0
        else:
            flag_came=1
        print("文件上传配置:")
        print(china_row_flag,english_row_flag,unit_row_flag,type_flag)
        if(file_type=="csv" or file_type=="txt"):#1.保存文件2.写入文件状态表3.导入数据库4.修改状态
            # 保存文件到指定路径
            the_file.save("score_table/" + the_file.filename)
            file_size=os.path.getsize("score_table/"+the_file.filename)
            # 记录文件基本信息
            if(flag_came==0):
                fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)
                fileroot.file_update_state(file_name,"已上传")
            print("文件类型:"+file_type+",文件大小:"+""+hum_convert(file_size)+",上传时间:"+file_time+",文件名:"+file_name+",上传用户:"+user_id)
            #将文件存入数据库
            flag=connectsql.read_csv(the_file.filename,china_row_flag,english_row_flag,unit_row_flag,type_flag)#将文件存入数据库、
            #修改状态
            fileroot.file_update_state(file_name,  "已导入数据库")
        #excel_example文件夹xlsx,xls
        elif(file_type=="xlsx" or file_type=="xls"):
            # 保存文件到指定路径
            the_file.save("excel_example/" + the_file.filename)
            file_size=os.path.getsize("excel_example/"+the_file.filename)
            # 记录文件基本信息
            if (flag_came == 0):
                fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)#记录文件基本信息
                fileroot.file_update_state(file_name,  "已上传")
            print("文件类型:" + file_type + ",文件大小:" +""+hum_convert(file_size)+ ",上传时间:" + file_time + ",文件名:" + file_name+",上传用户:"+user_id)
            # 将文件存入数据库
            flag = connectsql.read_example(the_file.filename,china_row_flag,english_row_flag,unit_row_flag,type_flag)
            # 修改状态
            fileroot.file_update_state(file_name,  "已导入数据库")
        #word_data文件夹docx,doc
        elif(file_type=="docx" or file_type=="doc"):
            # 保存文件到指定路径
            the_file.save("word_data/" + the_file.filename)
            file_size=os.path.getsize("word_data/"+the_file.filename)
            # 记录文件基本信息
            fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)#记录文件基本信息
            fileroot.file_update_state(file_name,  "已上传")
            print("文件类型:" + file_type + ",文件大小:" +""+hum_convert(file_size)+ ",上传时间:" + file_time + ",文件名:" + file_name+",上传用户:"+user_id)
        else:
            # 保存文件到指定路径
            the_file.save("test_data/" + the_file.filename)
            file_size=os.path.getsize("test_data/"+the_file.filename)
            # 记录文件基本信息
            fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)#记录文件基本信息
            fileroot.file_update_state(file_name, "已上传")
            print("文件类型:" + file_type + ",文件大小:" +""+hum_convert(file_size)+ ",上传时间:" + file_time + ",文件名:" + file_name)
            return jsonify({"code": 2, "msg": "", "data": ""})
        if(flag==1):
            print("导入成功")
            if(flag_came==0):
                return jsonify({"code": 1, "msg": "", "data": ""})
            else:
                print("相同文件上传")
                print(fileroot.find_filedata_filename(file_name))
                if (type_0 == "0"):
                    return jsonify({"code": 3, "msg": "", "data": ""})
                else:
                    return jsonify({"code": 4, "msg": "", "data": ""})
        else:
            print("导入失败")
            return jsonify({"code": -1, "msg": "", "data": ""})
#读取样表生成数据字典type_flag 1 追加,2 覆盖
def read_example(path,china_row,english_row,unit_row,type_flag):
    flag=1
    conn, cursor = get_conn_mysql()
    #将excel转换为csv文件
    data = pd.read_excel('excel_example/'+path, 'Sheet1')
    data.fillna('', inplace=True)
    print(data)
    csv_name = path.split(".")[0]
    # data.to_csv("excel_data/"+csv_name+'.csv', encoding='utf-8')
    # data_csv=pd.read_csv("excel_data/"+csv_name+".csv")
    # 编写表创建语句(字段类型就设为string)
    # 表名
    table_name = path.split(".")[0]
    ######################################################
    #获取数据三种情况各自为keys
    if(china_row=="1"):
        key_china = data.keys()
        key_0 = data.values.tolist()[(int)(english_row)-2]
        key_unit=data.values.tolist()[(int)(unit_row)-2]
    if(english_row=="1"):
        key_china = data.values.tolist()[(int)(china_row)-2]
        key_0 = data.keys()
        key_unit=data.values.tolist()[(int)(unit_row)-2]
    if(unit_row=="1"):
        key_china = data.values.tolist()[(int)(china_row)-2]
        key_0 = data.values.tolist()[(int)(english_row)-2]
        key_unit=data.keys()
    key=""
    for i in key_0:
        key=key+","+i
    key=key[1:]
    if (type_flag=="0"):
        delete_sql = "drop table " + csv_name
        try:
            cursor.execute(delete_sql)
        except:
            traceback.print_exc()
            flag = 0
            print("表删除失败")
    #建表及插入数据
    sql = "CREATE TABLE IF NOT EXISTS " + csv_name + " ("
    # 循环加入key值
    j=0
    for i in key_0:
        sql = sql + i + " VARCHAR(45) NOT NULL DEFAULT '#' comment '"+key_china[j]+","+key_unit[j]+"',"
        j=j+1;
    creat_sql = sql[0:-1] + ") ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;"
    print(creat_sql)
    # 获取%s
    s = ','.join(['%s' for _ in range(len(data.columns))])
    # 获取values
    values=[]
    for i in data.values.tolist()[2:]:
        values.append(i)
    print(values)
    # 组装insert语句
    insert_sql = 'insert into {}({}) values({})'.format(table_name, key, s)
    print(insert_sql)
    # print(key_china)#中文字段名
    # print(key_unit)#中文单位
    # print(key)#英文字段名
    # print(values)#数据
    #创建表
    try:
        cursor.execute(creat_sql)
    except:
        traceback.print_exc()
        flag=0
        print("表创建失败")
    # 插入数据
    try:
        for i in values:
            cursor.execute(insert_sql, i)
            print(insert_sql)
            print(i)
        conn.commit()
    except:
        traceback.print_exc()
        flag=0
        print("写入错误")
    close_conn_mysql(cursor, conn)
    return flag
原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15551082.html