前言
本篇文章主要探索一个很小细节,就是to_sql 到我们的mysql数据库时,你是使用追加,还是替换呢?
这儿就推荐使用追加!append。
接下来给大家贴代码比较演示。
代码
假设我有一个数据,如图
需要追加到目前的mysql数据库的某表当中的数据,它目前如图所示
比较一下,可以看出MYSQL 的 表结构 相比数据多sports字段
接下来我分别做append、replace的代码操作,并贴截图比较差异:
append
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
import MySQLdb
test = pd.DataFrame({'name':['Jim','xxxtest'],'english':['100','40'],'maths':['11','54'],'music':['38','91']})
engine = create_engine('mysql://root:[email protected]/45exercise?charset=utf8')
pd.io.sql.to_sql(test,'a1',con = engine, if_exists='append', index = False)
执行一下上述代码,再去观察mysql的变化情况,如图
可以发现,对于存储的字段不存在时,追加操作输出结果是空字段,不影响表结构
replace
那么我们再来试一下,用replace有什么效果
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
import MySQLdb
test = pd.DataFrame({'name':['Jim','xxxtest'],'english':['100','40'],'maths':['11','54'],'music':['38','91']})
engine = create_engine('mysql://root:[email protected]/45exercise?charset=utf8')
pd.io.sql.to_sql(test,'a1',con = engine, if_exists='replace', index = False)
注意观察截图,你发现你导入的数据是什么,它就长什么样。
也就是你的表结构直接就修改掉了。
那么这样子会存在什么问题吗?
假设你的表结构是你精心设计好,每个字段都有各自作用,而同时为了更灵活处理数据使用了python。
处理好的数据想导回到mysql时候,有些字段你可能会不需要导入,但是此时用了replace的话,你的表结构就直接被更改了,这是非常危险的动作!
所以如果想要保留表结构同时,追加新数据
可以使用
清空表操作:truncate table xxx;
然后再使用:append 的 to_sql
请记住每次清空表之前一定要做备份!
最后贴张图:
replace操作是先删表,然后重新创表、再插入数据。