Я пытаюсь вставить некоторые данные из текстового файла (поля заканчиваются на ";") в таблицу в 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+.
Где я делаю не так?