python中使用flask,有一个页面是使用xlrd解析一个8万条excel的数据超时,有什么办法不超时?

python中使用flask,有一个页面是使用xlrd解析一个8万条excel的数据超时,有什么办法不超时?
代码如下

@app.route('/import')
def import_xlsx():
    # 连接数据库
    conn = pymysql.connect(host='192.168.10.2', port=3306, user='project', passwd='123456',
                           db='project')  # db:库名

    # 使用cursor()方法获取操作游标
    cursor = conn.cursor()
    cursor.execute("truncate table project_info")
    conn.commit()

    cursor.execute("select * from project_attach_files where type=1");
    result_one = cursor.fetchone()
    print("导入文件")
    print(result_one[2])

    try:
        ExcelFile = xlrd.open_workbook(r'.' + result_one[2])
    except Exception as e:
        print(e)
    # print(ExcelFile.sheet_names())
    sheet = ExcelFile.sheet_by_index(0)
    # print(sheet.nrows)
    print(sheet.nrows);

    cursor.execute("update project_attach_files set rows=" + str(sheet.nrows) + " where type=1");
    conn.commit()

    for i in range(sheet.nrows):
        # print(sheet.row_values(i))
        data = sheet.row_values(i)
        # print(i)
        # print(data[1])
        # 从第四行开始读取
        if (i >= 5):
            # sql_insert = 'insert into project_info(data_15,data_103,data_106) values(%s,%s,%s)',(data[4],data[6],data[7])
            # print(sql_insert)
            # 建设类型是"新建"丶主动规划的取交付验收时间 其他的取内验完成时间
            if data[14] == '新建' or data[14] == '主动规划':
                data[133] = data[136]

            # 投资总计(元) 兼容没有金额的情况
            if (data[102] == ''):
                data[102] = 0
            # 项目名称
            if (data[106] == ''):
                data[106] = ""
            # 项目编码
            if (data[107] == ''):
                data[107] = ""
            # 设计投资金额
            if (data[102] == ''):
                data[102] = 0
            # 内部验收结束时间
            if (data[134] == ''):
                data[134] = '1970-01-01'
            # 项目转资投资合计
            if (data[150] == ''):
                data[150] = '0'
            # 项目状态
            if (data[164] == ''):
                data[164] = ""

            # data_15 建设方式 14
            # data_103 投资总计  102
            # data_106 项目名称 106
            # data_108 项目编码 107
            # data_114 设计投资金额(元) 102
            # data_134 内部验收结束时间 134
            # data_150 项目转资投资合计 150
            # data_170 项目状态 164

            sql = '''insert into project_info(data_15,data_103,data_106,data_108,data_114,data_134,data_150,data_170) values("%s","%s","%s","%s","%s","%s","%s","%s")''' % (
                data[14], data[102], data[105], data[107], data[102], data[134], data[150], data[164])

            cursor.execute(sql)
            conn.commit()
    return render_template('index.html', result_one=result_one[2])

希望大佬给个处理的思路或者解决不超时的办法而可以顺利解析,谢谢

阅读 2.6k
3 个回答

你说的超时应该是指http超过,一种是在你的http服务器设置延长http超时的时间,另一种是把import_xlsx做为异请求,开了个子进程去处理

处理excel之后用新的pymysql连接查询数据库

一次插入一行。。。这效率不行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题