В настоящее время я пытаюсь ускорить процесс передачи данных через сторонние инструменты. Я написал функцию для массового проталкивания операторов вставки в нашу базу данных MySQL, но получаю следующую ошибку:
_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")
Функция, которую я написал, выглядит следующим образом, принимая record_array (массив диктов, содержащий данные, которые нужно передать в таблицу MySQL) и tablename (строка, содержащая имя таблицы):
def insert_update_bulk(self, record_array, tablename):
session = self.Session()
self.merge_query = ""
for r in record_array:
query = '''INSERT INTO {} ('''.format(tablename)
for k in r.keys():
query += '{}, '.format(k)
query = query[:-2] + ''') VALUES ('''
for v in r.values():
if type(v) == int:
query += '{},'.format(v)
else:
query += '"{}",'.format(str(v).replace('"', "'").replace('\n', ' ').replace('\r', ' '))
query = query[:-1] + ''') ON DUPLICATE KEY UPDATE '''
for k in r.keys():
if type(r[k]) == int:
query += '{}={},'.format(k, str(r[k]).replace('"', "'")).replace("'None'", 'NULL')
else:
query += '{}="{}",'.format(k, str(r[k]).replace('"', "'")).replace("'None'", 'NULL')
query = query[:-1] + '; '
self.merge_query += query
session.execute(self.merge_query.replace('%', '%%'))
self.Session.close_all()