Я работаю над пандамами данных и с sqlalchemy. Я пытаюсь объединить несколько идентичных баз данных в одну. Проблема в том, что таблицы могут иметь дубликаты между БД.
Другая проблема заключается в том, что у меня есть что-то около 30 миллионов строк, и это приводит к потере времени при работе с кадром данных (даже с размером фрагмента).
Я пытался выполнить итерации по всему фрейму данных, но это слишком долго для проверки дубликатов. Поэтому я хотел использовать SQL-запрос INSERT ... ON DUPLICATE KEY ... do something
, но единственные возможности - UPDATE
и IGNORE
. Я пытаюсь:
-> вставлять все строки -> по дублирующему ключу -> обновить строку, которую я пытался вставить, и вставить ее с новым идентификатором
Я не смог найти ничего с sqlalchemy для этой проблемы в Google
Что я делаю:
import pandas as pd
df = pd.DataFrame()
#put all datas in the df for one tables but from all databases
engine = create_engine("mysql://xxx:xxx@localhost/{db}".format(db=dbname))
df.to_sql(con=engine, name=tableName, if_exists='append', chunksize=chunksize, index= False)
И ошибка MYSQL - ДВОЙНОЕ ЗНАЧЕНИЕ ДЛЯ ПЕРВИЧНОГО КЛЮЧА
РЕДАКТИРОВАТЬ: Добавление схемы таблицы
table1 = Table('table1', metadata,
Column('id', VARCHAR(40), primary_key=True,nullable=False),
mysql_engine='InnoDB'
)
table2= Table('table2', metadata,
Column('id', VARCHAR(40), primary_key=True,nullable=False),
Column('id_of', VARCHAR(20),ForeignKey("table1.id"), nullable=False, index= True)
)
table3= Table('table3', metadata,
Column('index',BIGINT(10), primary_key=True,nullable=False,autoincrement=True),
Column('id', VARCHAR(40),nullable=False),
Column('id_produit', VARCHAR(40),ForeignKey("table2.id"), nullable=False, index= True),
Column('id_produit_enfant', VARCHAR(40),ForeignKey("table2.id"), nullable=False, index= True)
)
table4= Table('table4', metadata,
Column('index',BIGINT(10), primary_key=True,nullable=False,autoincrement=True),
Column('id', VARCHAR(40),nullable=False),
Column('id_produit', VARCHAR(40),ForeignKey("table2.id"), nullable=False, index= True)
)
table5= Table('table5', metadata,
Column('index',BIGINT(10), primary_key=True,nullable=False,autoincrement=True),
Column('id', VARCHAR(40),nullable=False),
Column('id_produit', VARCHAR(40),ForeignKey("table2.id"), nullable=False, index= True)
)
table6= Table('table6', metadata,
Column('index',BIGINT(10), primary_key=True,nullable=False,autoincrement=True),
Column('id', VARCHAR(40),nullable=False),
Column('id_produit', VARCHAR(40),ForeignKey("table2.id"), nullable=False, index= True)
)