Pandas 基礎 (19) - 運算元據庫 (read_sql, to_sql)

Rachel發表於2019-05-13

安裝兩個包:

pip3 install PyMySQL
pip3 install sqlalchemy

連線 Mysql 資料庫:

import pandas as pd
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+pymysql://root:root@localhost:3306/express')

這是連線 mysql 資料庫的引數規則, 如果是其他資料庫, 可參照 官網 下圖這個部分

Pandas 基礎(19) - 運算元據庫 (read_sql, to_sql)

下面就可以從資料庫讀取資料了:

df = pd.read_sql_table('users', engine)
df

只想讀取指定欄位也可以:

df = pd.read_sql_table('users', engine, columns=['email', 'mobile'])
df

執行 sql 語句:

query = '''
SELECT nick_name, email from users where id < 5
'''
df = pd.read_sql_query(query, engine)
df

假如你有一份 csv 格式的檔案, 想要匯入資料庫

Pandas 基礎(19) - 運算元據庫 (read_sql, to_sql)

先把它轉成 dataframe 吧:

df = pd.read_csv('/Users/rachel/Sites/pandas/py/pandas/21_sql/customers.csv')
df

輸出:

Pandas 基礎(19) - 運算元據庫 (read_sql, to_sql)

把表頭重新命名, 要保證跟要插入的資料表的欄位名一致, 否則是無法插入的:

df.rename(columns = {
    'nick_name': 'name',
    'Customer Phone': 'mobile',
}, inplace = True)
df

下面就是執行匯入資料庫的命令了. 第一個引數是指定要匯入到哪個表中, 第二個引數是連線用的, 第三個引數是要去掉索引, 第四個引數是指如果資料庫裡已經有某個值了, 就 keep both, 這個引數值有幾種不同的, 比如"覆蓋"等.

df.to_sql(
    name = 'admin_users',
    con = engine,
    index = False,
    if_exists = 'append'
)

介紹最後一個函式 pd.read_sql(), 它是 read_sql_table() 和 read_sql_query() 的集合, 也就說它會根據傳入的第一個引數自動判斷是 table 還是 query:

df = pd.read_sql('admin_users', engine)
df

and:

query = '''
SELECT nick_name, email from users where id < 5
'''
df = pd.read_sql(query, engine)
df

以上就是 Pandas 對資料庫的基本操作, 也是 Pandas 基礎學習的最後一篇, 我要開始進軍 Data Analysis. 耽誤好久了, 人笨, 走得慢.......

相關文章