Как-то так должно работать. Функция batch_csv
- это генератор, который выдает список строк размером size
на каждой итерации.
В функцию bulk_insert внесены изменения, чтобы использовать подстановку параметров и метод курсора executemany
. Подстановка параметров безопаснее, чем создание SQL вручную.
cursor.executemany
может пакетно вставлять SQL, как в исходной функции, хотя это зависит от реализации и должно быть проверено.
def batch_csv(size=10):
with open('/pasta/arquivo.csv') as f:
reader = csv.reader(f, delimiter='\t')
batch = []
for row in reader:
batch.append(row)
if len(row) == size:
yield batch
del batch[:]
yield batch
def bulk_insert(table_name, **kwargs):
mysqlConnection = MySqlHook(mysql_conn_id='id_db')
a = mysqlConnection.get_conn()
c = a.cursor()
sql ="""INSERT INTO user (id,user_name) VALUES (%s, %s)"""
batcher = batch_csv()
for batch in batcher:
c.executemany(sql, [row[0:2] for row in batch])
a.commit()