Вы выполняете запрос после каждого исправления орфографии, поэтому вы вставляете все промежуточные результаты. Вы должны сделать это только один раз после всех исправлений.
И вы можете вызвать mysql.connection.commit()
только один раз после обработки всех строк, это не обязательно должно быть в l oop.
row['a']
должно быть row[0]
, поскольку fetchall()
возвращает список кортежей, а не словарей.
for row in data:
for k, v in dikk.items():
t = re.compile(re.escape(k), re.IGNORECASE)
row[0] = t.sub(v, row[0])
print(row[0])
mySql_insert_query = """INSERT INTO table2 (a) VALUES (%s)"""
cur.execute(mySql_insert_query, (row[0],))
mysql.connection.commit()
Также возможно выполнить все замены одним вызовом до re.sub()
, а не oop. Преобразуйте все ключи в регулярное выражение, например key1|key2|key3|...
, и используйте функцию для получения замены из словаря.
t = re.compile("|".join(re.escape(k) for k in dikk))
row['a'] = t.sub(lambda m: dikk[m.group(0)], row['a']