一右核、工具
需要使用到的庫(kù)
import pandas as pd
import pymysql
from sqlalchemy import create_engine
二瞬雹、建立數(shù)據(jù)庫(kù)連接
- 使用
pymysql
庫(kù)
# 建立數(shù)據(jù)庫(kù)表連接
conn = pymysql.connect('localhost','user_name','password','database_name',charset='utf8')
# 關(guān)閉連接
conn.close()
- 使用
sqlalchemyl
庫(kù)
# 建立數(shù)據(jù)庫(kù)表連接
db = create_engine('dialect+driver://user_name:password@localhost:port/database')
conn = db.connect()
# 關(guān)閉連接
conn.close()
db.dispose()
三冈绊、讀取數(shù)據(jù)到DataFrame
- pandas.read_sql_query函數(shù)
# pd.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None)
# sql查詢語(yǔ)句
sql_query = "select * from <table_name>;"
# 將數(shù)據(jù)讀取到DataFrame
df = pd.read_sql_query(sql=sql_query, con=conn)
- pandas.read_sql_table函數(shù)(只適用于SQLAlchemy連接)
# 讀取整個(gè)table段标,可以不需要sql語(yǔ)句
# 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函數(shù)
pd.read_sql
函數(shù)綜合了pd.read_sql_query
和pd.read_sql_table
沃但,但只有在SQLAlchemy連接時(shí)拐辽,第一個(gè)參數(shù)才能用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)
現(xiàn)在通常使用的是SQLAlchemy連接池,所以直接用pd.read_sql更方便俱诸。
四菠劝、DataFrame寫入MySQL
- pandas.DataFrame.to_sql函數(shù)
Databases supported by SQLAlchemy [1] are supported. Tables can be newly created, appended to, or overwritten.
# 需要使用sqlalchemy連接池
# 如果數(shù)據(jù)表不存在,也可直接寫入數(shù)據(jù)睁搭,不需要事前創(chuàng)建數(shù)據(jù)表
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
參數(shù)
if_exists
參數(shù)默認(rèn)為fail,表示如果表table_name已存在赶诊,則不寫入;其他可選值:
replace: 替代原有數(shù)據(jù)
append: 添加數(shù)據(jù)到已有的表index
參數(shù)
index
默認(rèn)是True园骆,則DataFrame的index也會(huì)作為單獨(dú)一列寫入mysql舔痪。如果需要反復(fù)讀寫,建議index=False
锌唾。dtype
參數(shù)
需要使用SQLAlchemy的數(shù)據(jù)類型锄码,要提前導(dǎo)入:
from sqlalchemy.types import VARCHAR, Float, Integer, Date, Numeric, String, Text
五、總結(jié)
如果只是用pandas讀寫mysql數(shù)據(jù)晌涕,那么用sqlalchemy連接MySQL數(shù)據(jù)庫(kù)會(huì)更方便直接滋捶,而且可以不需要使用sql語(yǔ)句。