欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

那些年我们在python掉进的坑系列之一pandas的to_sql

程序员文章站 2022-07-16 23:39:05
那些年我们在python掉进的坑系列之一pandas的to_sql。在目前大数据和人工智能的大趋势下,越来越多的人开始学习python作为自己入手数据和ai的第一门语言,笔者也是如...

那些年我们在python掉进的坑系列之一pandas的to_sql。在目前大数据和人工智能的大趋势下,越来越多的人开始学习python作为自己入手数据和ai的第一门语言,笔者也是如此。很多人在接触python的第一步都是学习pandas,主要是这个框架是最接近于r和matlab学习起来轻松易懂。但是在pandas的使用中,有很多问题和很多人因为对和计算机概念不理解,导致很多很多的坑,笔者在此开一个系列博文,不定期更新中会将自己遇到的坑介绍给大家。

pandas坑之to_sql

pandas是将格式化数据直接编程python可读的dataframe格式(其实本质上就是字典,并且自动设置了index和colunms),pandas本身的操作给了用户很好的体验和数据分析过程,但是pandas从读取再转录入数据库是不少新人一直头疼的问题,笔者也为此最初头疼不已。根据《利用python进行数据分析》的书中,有大致介绍一个函数——to_sql,相信很多人都是对此了解的。

但是,使用to_sql这个函数有一个问题,虽然to_sql函数可以直接将字典数据直接存入数据库,但是,to_sql限制是非常之大的(毕竟别人写的类)

我们先看一个操作

import pandas as pd

import pymysql

conn=pymysql.connect(host,port,user,password,charset,db)

df1=pd.dataframe(list)

df.to_sql(tablename,conn)

相信很多人都是按照以上进行的傻瓜操作,但是笔者在这里只能告诉你们,这是大错特错的。

要学习python最快的方法,并不是上什么班,看视频,最快的方法,就是去python的库文档,python手册。毕竟python虽然在使用上非常难,但是在学习上并不是特别难(相对于java和c++)。

根据库的文档,我们看到to_sql函数支持两类mysql引擎一个是sqlalchemy,另一个是sqlliet3.没错,在你写入库的时候,pymysql是不能用的!!!mysqldb也是不能用的,你只能使用sqlalchemy或者sqlliet3!!鉴于sqllift3已经很久没有更新了,笔者这里建议使用sqlalchemy!!

所以上面那段要改写成下面这样:

import pandas as pd

from sqlalchemy import create_engine

conn = create_engine('mysql+mysqldb://root:password@localhost:3306/databasename?charset=utf8')

下面一步很关键,注意!!!to_sql函数并不在pd之中,而是在io.sql之中,是sql脚本下的一个类!!!所以to_sql的最好写法就是:

pd.io.sql.to_sql(df1,tablename,con=conn,if_exists='repalce')

是不是感觉大功告成了???

那是你的错觉,赶紧回到数据库看看吧!!你会发现wtf为什么我原来的数据都没有了!!

这就是to_sql的第二个坑if_exists字段:

很多新人按照网上的教程,都将if_exists字段定义为‘replace’活着‘fail’,要么发现原来数据没有了,要么发现什么时候都没有做!

麻烦请各位新人仔细阅读文档!!!

fail的意思如果表存在,啥也不做

replace的意思,如果表存在,删了表,再建立一个新表,把数据插入

append的意思,如果表存在,把数据插入,如果表不存在创建一个表!!

你看懂了吗,所以大家一定要读文档!读文档!!读文档!!!