python mysql append_Python细节——MYSQL的to_sql的if_exists推荐使用append

前言

本篇文章主要探索一个很小细节,就是to_sql 到我们的mysql数据库时,你是使用追加,还是替换呢?

这儿就推荐使用追加!append。

接下来给大家贴代码比较演示。

代码

假设我有一个数据,如图

ec8bd2c8628a

image.png

需要追加到目前的mysql数据库的某表当中的数据,它目前如图所示

ec8bd2c8628a

比较一下,可以看出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:xxxx@127.0.0.1/45exercise?charset=utf8')

pd.io.sql.to_sql(test,'a1',con = engine, if_exists='append', index = False)

执行一下上述代码,再去观察mysql的变化情况,如图

ec8bd2c8628a

image.png

可以发现,对于存储的字段不存在时,追加操作输出结果是空字段,不影响表结构

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:xxxx@127.0.0.1/45exercise?charset=utf8')

pd.io.sql.to_sql(test,'a1',con = engine, if_exists='replace', index = False)

ec8bd2c8628a

注意观察截图,你发现你导入的数据是什么,它就长什么样。

也就是你的表结构直接就修改掉了。

那么这样子会存在什么问题吗?

假设你的表结构是你精心设计好,每个字段都有各自作用,而同时为了更灵活处理数据使用了python。

处理好的数据想导回到mysql时候,有些字段你可能会不需要导入,但是此时用了replace的话,你的表结构就直接被更改了,这是非常危险的动作!

所以如果想要保留表结构同时,追加新数据

可以使用

清空表操作:truncate table xxx;

然后再使用:append 的 to_sql

请记住每次清空表之前一定要做备份!

最后贴张图:

ec8bd2c8628a

image.png

replace操作是先删表,然后重新创表、再插入数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值