我正在使用pandas数据框并使用sqlalchemy。我想做的是将多个相同的数据库合并为一个。问题在于表在数据库之间可能重复。 另一个问题是我大约有3000万行,这在处理数据帧(甚至使用块大小)时会造成时间损失。
我试图遍历整个数据帧,但是对于检查重复项来说太长了。因此,我想使用SQL查询INSERT ... ON DUPLICATE KEY ... do something
,但是唯一的可能性是UPDATE
和IGNORE
。我正在尝试的是:
->插入每行->在重复键上->更新我尝试插入的行,并使用新ID插入
对于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)
)
答案 0 :(得分:2)
您的问题是:
DUPLICATE VALUE FOR PRIMARY KEY
这是熊猫的索引。 Panda允许重复,因为索引和MySQL及其他关系数据库不允许重复。
主键是特殊的关系数据库表列(或列的组合),指定用于唯一地标识所有表记录。主键的主要功能是:它必须为每行数据包含一个唯一值。
所以您的问题是如何消除熊猫索引上的duplicates。