查看原文
其他

pandas数据保存至Mysql数据库

2017-09-14 王大伟 Python爱好者社区

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


前言

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

前段时间写了两篇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用于测试:



结果运行成功:


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


大显身手

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

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

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

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


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



我们看一下数据的df:



我们现在要将这个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是你本地数据库的密码


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



意思大概是:一部分拉丁无法编码,所以我们设置一下编码方式: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))

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



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

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

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



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

业务知识一站通,懂业务,让你从技术人才中脱颖而出!

陈老师基于咨询公司从业经验与8年25个项目经验,精心打造业务知识体系课程。

点击阅读原文立即学习


福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。

长按指纹 > 识别图中二维码 > 添加关注


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存