pandas对mysql数据库的存取操作

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)

 

上一篇:Docker Engine在Centos下的安装


下一篇:Linux 文件操作监控inotify功能及实现原理【转】