Python ограничивающий массив - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь вставить некоторые данные из текстового файла (поля заканчиваются на ";") в таблицу в MySQL, используя Python. Вставка по одной занимает слишком много времени, поэтому я решил написать цикл для вставки большого блока строк сразу, но не для всего файла (для этого не было памяти). Таблица имеет 21 столбец.

import datetime
import mysql.connector

print(datetime.datetime.now())
with open("/backup/backup/backupDB/csv/file.txt", "r", encoding = "latin-1") as data:       
    dbconn = mysql.connector.connect(
        host = "server", user = "user", password = "password", port = 3306
    )
    cur = dbconn.cursor(prepared = True)
    cur.execute("SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema='schema' AND table_name='table'")
    iterColumn = cur.fetchall()
    columns = str(iterColumn).replace("(","").replace(",)","").replace("[","(").replace("]",")").replace("'","")
    next(data)
    cur = dbconn.cursor()
    block = 5000
    y = []
    try:
        while True:        
            for x in data:
                x = x.split(";")
                y.append(tuple(x))
                if len(y) == block:
                    break
            cur.executemany("insert ignore into schema.table " + columns + " values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", y)
            dbconn.commit()
            y=[]  
    except:
        print(datetime.datetime.now())

Приведенный выше код работает, но он точно ограничивает вставку до 60000 строк, хотя в моем файле 210000+.

Где я делаю не так?

...