
【Pandas获取数据】读取、写入数据库数据
在Python中,可以连接数据库,使用Pandas的 read_sql() 函数读取数据表、用to_sql来写入数据,文章是它门的用法和常用参数的说明。
在Python中,可以连接数据库,使用Pandas的 read_sql() 函数读取数据表、用to_sql来写入数据,文章是它门的用法和常用参数的说明,文中所用数据均来源与网络。
一、读取数据
1.基础用法
在使用Pandas读取数据之前首先要做的就是连接数据库(如果小伙伴不知道如何连接数据库,可以参考博主python连接mysql的文章),连接好数据库后,利用Pandas的read_sql()函数执行SQL,读取数据。
示例代码:
import pymysql #导入库
# 连接mysql
conn = pymysql.connect(
host='127.0.0.1', # 数据库主机名
port=3306,# 数据库端口,如果是3306就填写3306
user='root', # 数据库用户名
passwd='mysql', # 数据库密码
db='ysm', # 需要连接的数据库名称
charset='utf8') # 数据库编码
sql_1 = "select * from ret limit 10"
#利用pandas直接获取数据,输出的数据为dataframe
data = pd.read_sql(sql_1, conn)
print(data)
#最后记得关闭连接
conn.close()
输出结果:
2、常用参数
(1)sql: SQL命令字符串
(2)con: 连接sql数据库的engine,一般可以用SQLalchemy或者pymysql之类的包建立
(3)index_col: 选择某1列或几列作为index(或MultiIndex),字符串或字符串列表
(4)coerce_float: 非常有用,将数字形式的字符串直接以float型读入
(5)parse_dates: 将某一列日期型字符串转换为datetime型数据,与pd.to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式:
比如{column_name: format string}(format string:“%Y:%m:%H:%M:%S”)。
(6)columns: 要选取的列。一般没啥用,因为在sql命令里面一般就指定要选择的列了
(7)chunksize: 如果提供了一个整数值,那么就会返回一个generator,每次输出的行数就是提供的值的大小。
二、写入数据
1、基础用法
to_sql(),将DataFrame数据写数据库中,to_sql()函数使用时,不能通过pymysql库连接数据库,要使用 sqlalchemy 库,没安装的话使用 pip install sqlalchemy 安装。直接使用pymysql链接,会报如下错误:
DatabaseError: Execution failed on sql: SELECT name FROM sqlite_master WHERE type=‘table’ AND name=?; not all arguments converted during string formatting unable to rollback
示例代码:
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:mysql@127.0.0.1:3306/ysm")
data.to_sql(name='new', con=engine ) #此处data数据为read_sql读取 test_pandas 数据
输出结果:
注意:直接导出dataframe数据到数据表时,默认会将index索引列一起导入到表中,不需要可以通过index参数设置调整。
2、常用参数
(1)name: SQL表的名称
(2)con: 连接数据库,一般用sqlalchemy库连接
(3)if_exists: {‘fail’,‘replace’,‘append’},默认’fail’,fail:引发ValueError;replace:在插入新值之前删除表;append:将新值插入现有表。
(4)index: 布尔值,默认为True,将DataFrame索引写为列,使用index_label作为表中的列名。
(5)index_label: 字符串或序列,默认为None,索引列的列标签。如果给出None(默认)且 index为True,则使用索引名称。如果DataFrame使用MultiIndex,则应该给出一个序列。
(6)chunksize: int,可选,行将一次批量写入此大小。默认情况下,所有行都将立即写入。
(7)dtype: dict,可选,指定列的数据类型。
更多推荐
所有评论(0)