I. sqlalchemy建立mysql連接配接
II. pd.read_sql()
III. df.to_sql()
I. sqlalchemy建立mysql連接配接
create_engine(*args, **kwargs)
标準調用方式是将URL作為第一個位置參數
形如``dialect[+driver]://user:[email protected]/dbname[?key=value..]``
dialect 資料庫類型, 如'mysql', 'oracle'
driver DBAPI的名字, 如'mysqlconnector', 'pymysql'
(安裝第一個庫: pip install mysql-connector-python)
user 使用者名, 一般為root
password 密碼
host IP, 本地連接配接的話為'localhost'
dbname 要連接配接的資料庫的名字
舉個例子:

II. pd.read_sql()
這個方法其實是read_sql_query和read_sql_table的封裝,read_sql()根據輸入選擇不同的方法執行。
重點參數
sql 表名或查詢語句
con 資料庫連接配接對象, 對于sqlalchemy來說是Engine對象
一般參數
index_col 用作索引的一列或多列
字元串或字元串的清單, 可選, 預設為None.
coerce_float 嘗試把非字元串, 非數值的對象(如decimal.Decimal)轉換為浮點數
parse_dates list或dict, 預設為None
- 要解析為日期的列名清單
- {column_name: format string}格式的字典, 其中format string是在解析
字元串時間時相容的strftime, 或者是在解析整數時間戳時,
(D, s, ns, ms, us)的其中之一
- {column_name: arg dict}格式的字典, 其中arg dict對應到函數
`pandas.to_datetime`的關鍵字參數
columns 從SQL表中選取的列名的清單
清單, 預設為None
chunksize 如果指定, 則傳回一個疊代器, 'chunksize'是每個塊(chunk)中包含的行數,
整型, 預設為None
需要注意的是, 時間戳隻會被轉化為UTC, 而不是我們當地的日期和時間,
是以我們需要手動加上8小時
上面的例子是讀取本地資料庫, 下面再寫一個遠端讀取:
需要注意的是, 這裡時間戳隻會被轉化為UTC, 而不是我們當地的日期和時間(即UTC+8), 是以我們需要手動加上8小時
III. df.to_sql()
将存儲在DataFrame中的記錄寫入SQL資料庫。支援所有SQLAlchemy支援的資料庫, 可以新建立(create)一個表, 也可以附加(append), 或者覆寫(overwrite)原有的表
to_sql(self, name, con, schema=None, if_exists='fail', index=True, index_label=None,
chunksize=None, dtype=None, method=None)
重點參數
name SQL表的表名, 字元串
con sqlalchemy.engine.Engine 或 sqlite3.Connection
使用SQLAlchemy可以使用該庫支援的任何資料庫
schema 資料庫的名字, 可選, 預設為None, 如果不填, 将使用預設的schema
一般參數
if_exists: 如果表已經存在, 如何操作, {'fail', 'replace', 'append'}中的一種, 預設為'fail'
* fail: 引發ValueError
* replace: 在插入新值之前删除表
* append: 将新值插入到現有表
index 将DataFrame的index索引寫為一列, 使用'index_label'作為表中的列名.
bool型, 預設為True
index_label 索引列的列标簽. 字元串或序列, 預設為None
* 如果index_label為None, 同時index為True, 那麼索引名将被使用(index names)
* 如果DataFrame使用MultiIndex, 則應該給出一個序列
chunksize 行将按指定的大小分批次寫入. 整型, 可選, 預設為None
預設一次性寫入所有行
dtype 指定列的資料類型. dict類型, 可選, 預設為None
字典的鍵為columns names, 字典的值為SQLAlchemy types或
strings for the sqlite3 legacy mode
method 控制SQL插入子句的使用, {None, 'multi', callable}中的一個, 預設為None
* None: 使用标準的SQL'INSERT'子句(每行一個)
* 'multi': 在單個'INSERT'子句内傳遞多個值
* 帶'(pd_table, conn, keys, data_iter)'簽名的可調用對象
還是舉例說明