我正在使用 sqlalchemy 处理 pandas 数据框。我想要做的是将多个相同的数据库合并为一个。问题是这些表在 DB 之间可能有重复项。 另一个问题是我有大约 3000 万行,这会导致在处理数据帧时浪费时间(即使使用 block 大小)。
我尝试遍历整个数据框,但这对于检查重复项来说太长了。所以我想使用 SQL 查询 INSERT ... ON DUPLICATE KEY ... do something
但唯一的可能性是 UPDATE
和 IGNORE
。我正在尝试的是:
-> 插入每一行 -> 在重复键上 -> 更新我尝试插入的行并使用新 ID 插入它
我在 google 上找不到任何关于这个问题的 sqlalchemy
我在做什么:
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错误是DUPLICATE VALUE FOR PRIMARY KEY
编辑:添加表模式
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)
)
最佳答案
你的问题是:
DUPLICATE VALUE FOR PRIMARY KEY
这是 pandas 中的索引。 Panda 允许重复,因为索引和 MySQL 和其他关系数据库不允许重复。
A primary key is a special relational database table column (or combination of columns) designated to uniquely identify all table records. A primary key's main features are: It must contain a unique value for each row of data.
所以你的问题是如何消除duplicates在 Pandas 索引上。
关于python - Insert ... ON DUPLICATE KEY INSERT something new 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56233696/