pandas数据保存至Mysql数据库

浏览: 240

前言

好久没写文章了,你们想我了没【我就是这样,你习惯就好】

前段时间写了两篇mysql和python交互的文章

第一篇局限于导入一条数据进入数据库【主要讲的是面向对象编程和Python数据库操作基础】

传送门:Python操作Mysql数据库入门——查看和增加记录

第二篇讲的是从数据库读取数据到pandas【为数据分析做准备】

传送门:Python操作Mysql数据库入门——数据导入pandas(数据分析准备)

因为最近又在写爬虫,所以想把爬到的数据(dataframe格式)存在mysql里

终于在今天下午成功了


小试牛刀

import MySQLdb
import pandas as pd
from sqlalchemy import create_engine

host = '127.0.0.1'
port = 3306
db = 'test'
user = 'root'
password = '********'

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))

try:
df = pd.DataFrame([[1,'x'],[2,'y']],columns=list('ab'))
df.to_sql('test1',con=engine,if_exists='replace',index=False)
except Exception as e:
print(e)

注:需要你修改的部分:

(1)db是你本地数据库的名称(你用自己本地的数据库名称)

(2)password是你本地数据库的密码


这里我创建了一个简单的df用于测试:

Clipboard Image.png


结果运行成功:

Clipboard Image.png

本地数据库自动新建了一个test1表,数据成功写入,(我用的mysql客户端软件是:Navicat)


大显身手

当然,我们平时数据清洗好的df或者爬虫爬到的数据做成df怎么保存到mysql呢?

其实现在看起来就很简单了

当然,在这里,我只教会大家怎么保存df到mysql

如果大家对爬虫和数据分析清洗有兴趣,可以看我以前写的文章


我打开了一个爬虫爬到的房地产数据,如下图:

Clipboard Image.png


我们看一下数据的df:

Clipboard Image.png


我们现在要将这个df写入mysql,就好比爬到的数据或者清洗完的数据写入mysql:



import MySQLdb
import pandas as pd
from sqlalchemy import create_engine

host = '127.0.0.1'
port = 3306
db = 'test'
user = 'root'
password = '********'

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))

try:
df = pd.read_csv('house_data.csv')
df.to_sql('test1',con=engine,if_exists='replace',index=False)
except Exception as e:
print(e)

注:需要你修改的部分:

(1)db是你本地数据库的名称(你用自己本地的数据库名称)

(2)password是你本地数据库的密码


运行结果是,捕获到了异常:

Clipboard Image.png


意思大概是:一部分拉丁无法编码,所以我们设置一下编码方式:charset=utf8

import MySQLdb
import pandas as pd
from sqlalchemy import create_engine

host = '127.0.0.1'
port = 3306
db = 'test'
user = 'root'
password = '********'

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s?charset=utf8") % (user, password, host, db))

try:
df = pd.read_csv('house_data.csv')
df.to_sql('test1',con=engine,if_exists='replace',index=False)
except Exception as e:
print(e)

注:需要你修改的部分:

(1)db是你本地数据库的名称(你用自己本地的数据库名称)

(2)password是你本地数据库的密码

只修改了这一行代码:

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s?charset=utf8") % (user, password, host, db))

我们打开本地的数据库,右键刷新:

Clipboard Image.png


已经可以看到,数据已经写入mysql了

大家想要加其他功能可以参考:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

Clipboard Image.png


如有错误之处,请留言评论指出,谢谢~

推荐 4
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

这一篇等的久

要回复文章请先登录注册