pandas读取及存储MySQL

一、工具

需要使用到的库

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_querypd.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语句。

你可能感兴趣的:(pandas读取及存储MySQL)