Pandas读取MySQL数据
我们都知道,pandas读取csv用readcsv,读取Excel文件用readexcel,当然,读取数据库文件,可以用read_sql。
其方法的参数如下:
read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
我们常用的就是前两个参数:
-
sql 为可执行的sql语句
-
con为数据库的连接
为了读取mysql数据库,我们使用pymysql库(记得安装)来进行连接,然后使用read_sql读取即可。
conn = pymysql.connect(
host = 'localhost',
user = 'root',
passwd = '123456',
db = 'mydb',
port=3306,
charset = 'utf8'
)
df = pd.read_sql('select * from douban',conn)
df.head()
Pandas存储MySQL数据
同样的,存储数据的方法有tocsv,toexcel等,那要将DataFrame存储到数据库中,我们同样可以使用to_sql方法来完。
其方法的参数如下:
to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)
(1)name参数为存储的表名;
(2)con参数为连接数据库,这里和读取有区别,不能用pymysql连接;
(3)if_exists参数用于判断是否有重复表名。填写fail表示:如果有重复表名,就不保存。填写replace用作替换。填写append,就在该表中继续插入数据。
df[:9].to_sql(name='test',con='mysql+pymysql://root:123456@localhost:3306/mydb?charset=utf8',if_exists='replace',index=False)
使用SQLAlchemy模块
pandas对mysql数据库存取方法示例
import pandas as pd from sqlalchemy import create_engine # 初始化数据库连接,使用pymysql模块 # MySQL的用户:root, 密码:147369, 端口:3306,数据库:test engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test') # 查询语句,选出employee表中的所有数据 sql = ''' select * from employee; ''' # read_sql_query的两个参数: sql语句, 数据库连接 df = pd.read_sql_query(sql, engine) # 输出employee表的查询结果 print(df) # 新建pandas中的DataFrame, 只有id,num两列 df = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['zhangsan', 'lisi', 'wangwu', 'zhuliu']}) # 将新建的DataFrame储存为MySQL中的数据表,储存index列 df.to_sql('mydf', engine, index=True) print('Read from and write to Mysql table successfully!')
读取csv文件记录存入数据库示例
# -*- coding: utf-8 -*- # 导入必要模块 import pandas as pd from sqlalchemy import create_engine # 初始化数据库连接,使用pymysql模块 db_info = {'user': 'root', 'password': '123456', 'host': 'localhost', 'port': 3306, 'database': 'test' } engine = create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info, encoding='utf-8') # 直接使用下一种形式也可以 # engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test') # 读取本地CSV文件 df = pd.read_csv("C:/Users/fuqia/Desktop/example.csv", sep=',') print(df) # 将新建的DataFrame储存为MySQL中的数据表,不储存index列(index=False) # if_exists: # 1.fail:如果表存在,啥也不做 # 2.replace:如果表存在,删了表,再建立一个新表,把数据插入 # 3.append:如果表存在,把数据插入,如果表不存在创建一个表!! pd.io.sql.to_sql(df, 'example', con=engine, index=False, if_exists='replace') # df.to_sql('example', con=engine, if_exists='replace')这种形式也可以 print("Write to MySQL successfully!")
SqlAlchemy模块对数据库执行sql语句操作:
from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test') sql = "DROP TABLE IF EXISTS example" engine.execute(sql)