pandas read_sql 和 to_sql 读写Mysql的参数详解

Pandas 读写 Mysql 主要用到两个函数,下面分析一下 pandas.read_sql() 和 DataFrame.to_sql() 的参数。

read_sql()函数

pandas.read_sql(sql, con, index_col = None, coerce_float = True, params = None, parse_dates = None, columns = None, chunksize)

参数:

● sql:需要执行的sql语句

● con:连接数据所需的engine,用其他数据库连接建立,如:pymysql

● index_col:选择那列怎为index

● coerce_float:将数字形字符串转为float

● params:list,tuple或dict,optional,default:None; 要传递给执行方法的参数列表。

parse_dates:将某列日期型字符串转换为datetime型数据

● columns:选择想要保留的列

● chunksize:每次输出多少行数据

import MySQLdb
mysql_cn= MySQLdb.connect(host='myhost', 
                port=3306,user='myusername', passwd='mypassword', 
                db='information_schema')
df_mysql = pd.read_sql('select * from VIEWS;', con=mysql_cn)    
print(len(df_mysql))
mysql_cn.close()

注意点:

1、加入chunksize参数后,返回的df不再是dataframe类型而是一个迭代器,每个分区均为行数1000的dataframe。因此不可直接对df进行dataframe的常规函数操作。

2、数据中有中文的时候数据库engine的charset参数需设置‘utf8’

3、数据中含有decimal类型数据,若不想读取时自动转化为float,一定要带“coerce_float=False”参数,因为默认值时true。楼主在读取数据时发现所有decimal的数据全部变为float类型,整数型多了.0不说,17位的数字变成了科学计数法并丢失了精度。

to_sql()函数

pandas.to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)

参数:

● name:SQL 表名
● con:与数据库链接的⽅式,推荐使⽤sqlalchemy的engine类型
● schema: 相应数据库的引擎,不设置则使⽤数据库的默认引擎,如mysql中的innodb引擎
ValueError
● if_exists: 当数据库中已经存在数据表时对数据表的操作,有replace替换、append追加,fail则当表存在时提⽰
● index:对DataFrame的index索引的处理,为True时索引也将作为数据写⼊数据表
● index_label:当上⼀个参数index为True时,设置写⼊数据表时index的列名称
● chunsize:设置整数,如20000,⼀次写⼊数据时的数据⾏数量,当数据量很⼤时,需要设置,否则会链接超时写⼊失败。

● dtype : 列名到 SQL 类型的字典,默认无;可选地指定列的数据类型

import pandas as pd  
from sqlalchemy import create_engine  
conn = create_engine('mysql+mysqldb://root:password@localhost:3306/databasename?charset=utf8')  
df = pd.DataFrame() 
df["A"] = [1,2,3,4]  
df["B"] = [11,22,33,44]  
df.to_sql('表名',con=engine,if_exists='replace/append/fail',index=False)

#password 数据库密码
#localhost 数据库ip
#databasename 数据库名
#if_exists='replace/append/fail'  选择其中之一
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yi Ian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值