一、工具
需要使用到的库
import pandas as pd
import pymysql
from sqlalchemy import create_engine
二、建立数据库连接
- 使用
pymysql
库
# 建立数据库表连接
conn = pymysql.connect('localhost','user_name','password','database_name',charset='utf8')
# 关闭连接
conn.close()
- 使用
sqlalchemyl
库
# 建立数据库表连接
db = create_engine('dialect+driver://user_name:password@localhost:port/database')
conn = db.connect()
# 关闭连接
conn.close()
db.dispose()
三、读取数据到DataFrame
- pandas.read_sql_query函数
# pd.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None)
# sql查询语句
sql_query = "select * from ;"
# 将数据读取到DataFrame
df = pd.read_sql_query(sql=sql_query, con=conn)
- pandas.read_sql_table函数(只适用于SQLAlchemy连接)
# 读取整个table,可以不需要sql语句
# pd.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)
df = pd.read_sql_table(table_name, con=conn)
- pandas.read_sql函数
pd.read_sql
函数综合了pd.read_sql_query
和pd.read_sql_table
,但只有在SQLAlchemy连接时,第一个参数才能用table名称。
# pd.read_sql(sql or table, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
df = pd.read_sql(sql, con=conn)
现在通常使用的是SQLAlchemy连接池,所以直接用pd.read_sql更方便。
四、DataFrame写入MySQL
- pandas.DataFrame.to_sql函数
Databases supported by SQLAlchemy [1] are supported. Tables can be newly created, appended to, or overwritten.
# 需要使用sqlalchemy连接池
# 如果数据表不存在,也可直接写入数据,不需要事前创建数据表
engine=create_engine('dialect+driver://username:password@localhost:port/database')
conn=engine.connect()
df.to_sql(name=table_name, con=conn, if_exists='fail')
if_exists
参数
if_exists
参数默认为fail,表示如果表table_name已存在,则不写入;其他可选值:
replace: 替代原有数据
append: 添加数据到已有的表index
参数
index
默认是True,则DataFrame的index也会作为单独一列写入mysql。如果需要反复读写,建议index=False
。dtype
参数
需要使用SQLAlchemy的数据类型,要提前导入:
from sqlalchemy.types import VARCHAR, Float, Integer, Date, Numeric, String, Text
五、总结
如果只是用pandas读写mysql数据,那么用sqlalchemy连接MySQL数据库会更方便直接,而且可以不需要使用sql语句。