Python 将数据帧插入mysql
我想在mysql中“插入忽略”整个熊猫数据帧。有没有一种方法可以做到这一点而不在行上循环Python 将数据帧插入mysql,python,mysql,pandas,pandas-to-sql,Python,Mysql,Pandas,Pandas To Sql,我想在mysql中“插入忽略”整个熊猫数据帧。有没有一种方法可以做到这一点而不在行上循环 在dataframe.to_sql中,我只看到存在“append”时的选项,但在重复的唯一键上仍会继续吗?在当前版本的pandas(0.20.3)之前,pandas中无法执行此操作 选项如果存在仅适用于表(不适用于行),如中所述 失败:如果表存在,则不执行任何操作 替换:如果表存在,请删除它,重新创建它,然后插入数据 追加:如果存在表,则插入数据。如果不存在,则创建 通过循环 这将降低每次插入一行的速度 f
在dataframe.to_sql中,我只看到存在“append”时的选项,但在重复的唯一键上仍会继续吗?在当前版本的
pandas(0.20.3)
之前,pandas中无法执行此操作
选项如果存在
仅适用于表(不适用于行),如中所述
失败
:如果表存在,则不执行任何操作
替换
:如果表存在,请删除它,重新创建它,然后插入数据
追加
:如果存在表,则插入数据。如果不存在,则创建
通过循环
这将降低每次插入一行的速度
for x in xrange(data_frame.shape[0]):
try:
data_frame.iloc[x:x+1].to_sql(con=sql_engine, name="table_name", if_exists='append')
except IntegrityError:
# Your code to handle duplicates
pass
考虑使用一个临时表(具有最终表的精确结构),该临时表总是被pandas替换,然后在游标调用中运行
INSERT IGNORE
:
dataframe.to_sql('myTempTable', con, if_exists ='replace')
cur = con.cursor()
cur.execute("INSERT IGNORE INTO myFinalTable SELECT * FROM myTempTable")
con.commit()
如果您使用的是sqlalchemy,请像这样替换最后3行:
connection=engine.connect()result=connection.execute(“INSERT IGNORE INTO myFinalTable SELECT*FROM mytentable”)connection.close()
dataframe.to_sql('myTempTable', con, if_exists ='replace')
cur = con.cursor()
cur.execute("INSERT IGNORE INTO myFinalTable SELECT * FROM myTempTable")
con.commit()