Попытка импортировать данные из файла Excel в таблицу RDS MySQL, и вставка занимает слишком много времени - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь импортировать данные из таблицы Excel в таблицу MySQL, используя python.У меня есть около 250 файлов в папке, которую я хочу импортировать в MySQL.Код работает и импортирует данные, но это занимает слишком много времени для каждого файла.

import xlrd
import MySQLdb
import os
import glob
database=MySQLdb.connect()
for filepath in glob.iglob('folder\\*.xlsx')
path=filepath
    workbook = xlrd.open_workbook(path)
    sheet = workbook.sheet_by_index(0)

    cursor=database.cursor()
    query="""insert into tx_shape_files(col1,col2,...col6) values(%s,%s,%s,%s,%s,%s)"""
    for r in range(1,sheet.nrows):

        col1=sheet.cell(r,0).value
        col2=sheet.cell(r,1).value
        col3=sheet.cell(r,2).value
        col4=sheet.cell(r,3).value
        col5=sheet.cell(r,4).value
        col6=sheet.cell(r,5).value
        values=(col1,col2,...col6)

        cursor.execute(query,values)
    cursor.close()
    database.commit()

    print("Done")
    columns=str(sheet.ncols)
    rows=str(sheet.nrows)
    print("Imported " +columns+ " columns and "+ rows+" rows to MYSQL")
database.close()

Этот код занимает слишком много времени для импорта данных из Excel в базу данных RDS MySql.

Пожалуйста, помогите мне оптимизировать мойкод.

1 Ответ

0 голосов
/ 19 апреля 2019

Попробуй попасть в дб только один раз.Вы можете вставить несколько строк в один оператор вставки, как показано ниже.

INSERT INTO tbl_name
    (a,b,c)
VALUES
    (1,2,3),
    (4,5,6),
    (7,8,9);

Выполнить оператор cursor.execute () вне внутреннего цикла for, чтобы выполнить запрос с несколькими строками одновременно.Добавление кода для справки.

import xlrd
import MySQLdb
import os
import glob
database=MySQLdb.connect()
for filepath in glob.iglob('folder\\*.xlsx')
path=filepath
    workbook = xlrd.open_workbook(path)
    sheet = workbook.sheet_by_index(0)

    cursor=database.cursor()
    query="""insert into tx_shape_files(col1,col2,...col6) values(%s,%s,%s,%s,%s,%s)"""
    all_values = []
    for r in range(1,sheet.nrows):

        col1=sheet.cell(r,0).value
        col2=sheet.cell(r,1).value
        col3=sheet.cell(r,2).value
        col4=sheet.cell(r,3).value
        col5=sheet.cell(r,4).value
        col6=sheet.cell(r,5).value
        values=(col1,col2,...col6)
        all_values.append(values)

    cursor.execute(query, all_values)
    cursor.close()
    database.commit()

    print("Done")
    columns=str(sheet.ncols)
    rows=str(sheet.nrows)
    print("Imported " +columns+ " columns and "+ rows+" rows to MYSQL")
database.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...