Photo by Glenn Carstens-Peters on Unsplash
在現今很多的Python應用當中,像是開發爬蟲獲取網頁資料,或透過API取得所需的資訊等,都有機會將這些有效的資料存進資料庫中,透過其強大的查詢語法篩選、分析及過濾資料,甚至可以直接匯出Excel報表等,資料庫扮演了非常重要的角色。
所以本文將延續瞭解Python存取API的重要觀念-以KKBOX Open API為例文章,模擬實務上呼叫KKBOX Open API取得資料後,如何透過Python存進MySQL資料庫中,並且執行資料的新增、查詢、修改及刪除操作,利用實作來瞭解Python存取資料庫的重要概念,重點包含:
所以本文將延續瞭解Python存取API的重要觀念-以KKBOX Open API為例文章,模擬實務上呼叫KKBOX Open API取得資料後,如何透過Python存進MySQL資料庫中,並且執行資料的新增、查詢、修改及刪除操作,利用實作來瞭解Python存取資料庫的重要概念,重點包含:
- Python專案前置作業
- 安裝MySQL資料庫
- 建立MySQL資料庫
- 建立MySQL資料表
- 新增資料表資料
- 查詢資料表資料
- 修改資料表資料
- 刪除資料表資料
一、Python專案前置作業
在開始今天的實作前,將Python專案中的charts.py簡化為以下範例:
import requests
# 取得Token
def get_access_token():
#API網址
url = "https://account.kkbox.com/oauth2/token"
#標頭
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Host": "account.kkbox.com"
}
#參數
data = {
"grant_type": "client_credentials",
"client_id": "貼上ID內容",
"client_secret": "貼上Secret內容"
}
access_token = requests.post(url, headers=headers, data=data)
return access_token.json()["access_token"]
# 取得該音樂排行榜的歌曲列表
def get_charts_tracks(chart_id):
access_token = get_access_token()
url = "https://api.kkbox.com/v1.1/charts/" + chart_id + "/tracks"
headers = {
"accept": "application/json",
"authorization": "Bearer " + access_token
}
params = {
"territory": "TW"
}
response = requests.get(url, headers=headers, params=params)
result = response.json()["data"]
return result
二、安裝MySQL資料庫
接下來安裝MySQL資料庫的部分,本文將需特別設定的步驟進行說明,其餘則保留預設值,進行下一步(Next)或執行(Execute)即可。
首先,前往MySQL的下載頁面,點選免費使用的社群版下載,如下圖:
進到下載畫面後,選擇Windows的安裝檔,如下圖:首先,前往MySQL的下載頁面,點選免費使用的社群版下載,如下圖:
最後下載MSI安裝檔,如下圖:
點擊Download按鈕後,在下一個畫面選擇「No thanks, just start my download.」即可。
開啟安裝檔,會看到如下圖的畫面:
開啟安裝檔,會看到如下圖的畫面:
選擇Develop Default,開始進行安裝,基本上都保留預設值即可,過程中有一個步驟是需要設定MySQL資料庫的管理員密碼,如下圖:
設定完成後,在接下來的安裝步驟中,需要驗證密碼,如下圖:
安裝完成後,開啟MySQL的資料庫管理工具 MySQL Workbench,如下圖:
透過這個管理工具,就可以來建立實作所需的資料庫及資料表了。
三、建立MySQL資料庫
點擊MySQL Workbench首頁左下角的Local instance(本地端伺服器)兩下,輸入在安裝過程中設定的資料庫管理員密碼後,即可進到管理的畫面。而建立資料庫的方式,就是點選上方功能列的新增資料庫圖示,如下圖:
輸入資料庫名稱(kkbox)及選擇字元集為utf8,如下圖:
接著點選Apply,資料庫就建立完成。
四、建立MySQL資料表
要在資料庫中建立資料表,需在左邊側欄的地方,切換到Schemas(模式)頁籤,如下圖:
其中可以看到剛剛所建立的資料庫,點選後,選擇Tables(資料表),右鍵新增資料表(Create Table),如下圖:
接著輸入資料表名稱(charts)及定義欄位,如下圖:
輸入完成後,同樣點選右下角的Apply,即完成資料表的建立。
五、新增資料表資料
MySQL資料庫的環境建置完成後,要透過Python進行存取,需要安裝pymysql套件(Package),可以利用 pip install pymysql 指令來達成。接著開啟Python專案,新增一個db.py檔,用來練習接下來的資料庫操作。
而Python專案要存取MySQL資料庫,除了引用pymysql模組(Module)外,還需要設定連線的參數,這邊利用Python字典(Dictionary)資料型態來進行設定,如下範例:
而Python專案要存取MySQL資料庫,除了引用pymysql模組(Module)外,還需要設定連線的參數,這邊利用Python字典(Dictionary)資料型態來進行設定,如下範例:
import pymysql
import charts
# 資料庫參數設定
db_settings = {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "資料庫管理員密碼",
"db": "kkbox",
"charset": "utf8"
}
接著,將資料庫參數傳入pymysql模組(Module)的connect()方法(Method)中,建立Connection物件。另外,在連線的過程中,可能會發生例外錯誤,所以建議使用Python的try-except例外處理機制,如下範例:
import pymysql
import charts
# 資料庫設定
db_settings = {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "資料庫管理員密碼",
"db": "kkbox",
"charset": "utf8"
}
try:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
except Exception as ex:
print(ex)
與資料庫的連線建立完成後,要進行相關的操作,需要建立Cursor(指標)物件來執行,這邊使用Python的with陳述式,當資料庫存取完成後,自動釋放連線,如下範例:
import pymysql
import charts
# 資料庫設定
db_settings = {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "資料庫管理員密碼",
"db": "kkbox",
"charset": "utf8"
}
try:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
#資料表相關操作
except Exception as ex:
print(ex)
接著即可在with陳述式區塊中,撰寫與執行SQL語法,而新增資料至資料表中需執行INSERT的SQL語法,如下範例:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料SQL語法
command = "INSERT INTO charts(id, name, artist)VALUES(%s, %s, %s)"
# 取得華語單曲日榜
charts = charts.get_charts_tracks("H_PilcVhX-E8N0qr1-")
for chart in charts:
cursor.execute(
command, (chart["id"], chart["name"], chart["album"]["artist"]["name"]))
# 儲存變更
conn.commit()
在第12行以華語單曲日榜的ID為例,呼叫get_charts_tracks()函式取得資料,回傳結果的格式為多筆字典(Dictionary)的串列(List),所以可以透過Python迴圈,利用Cursor(指標)物件執行新增資料的SQL語法,將每筆資料的id、歌曲名稱及歌手寫入資料庫中,最後透過Connection物件的commit()方法儲存。
開啟MySQL Workbench的檢視模式,即可看到執行結果,如下範例:
開啟MySQL Workbench的檢視模式,即可看到執行結果,如下範例:
執行結果:
六、查詢資料表資料
將華語單曲日榜的資料成功寫入charts資料表後,要透過Python撈取所有的資料,需執行SELECT的SQL語法,最後透過Cursor(指標)物件的fetchall()方法(Method)取回,如下範例:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 查詢資料SQL語法
command = "SELECT * FROM charts"
# 執行指令
cursor.execute(command)
# 取得所有資料
result = cursor.fetchall()
print(result)
如果只想取得單筆資料(第一筆),則可以利用fetchone()方法,如下範例:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料指令
command = "SELECT * FROM charts"
# 執行指令
cursor.execute(command)
# 取得第一筆資料
result = cursor.fetchone()
print(result)
而要取得特定筆數的資料,可以透過fetchmany()方法,傳入所需的筆數,如下範例:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料指令
command = "SELECT * FROM charts"
# 執行指令
cursor.execute(command)
# 取得前五筆資料
result = cursor.fetchmany(5)
print(result)
上述的查詢操作,皆是取回資料表中所有的資料,那要執行條件式的資料篩選,則可以加上WHERE語法,並且利用元組(Tuple)資料型態指定條件值,如下範例:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料指令
command = "SELECT * FROM charts WHERE name = %s"
# 執行指令
cursor.execute(command, ("太陽",))
# 取得所有資料
result = cursor.fetchall()
print(result)
執行結果:
七、修改資料表資料
假設要修改charts資料表中,id為5XeeDbHfELRucAOX6n的歌曲名稱(name)為Learn Code With Mike,需執行UPDATE的SQL語法,並且將主鍵(id)值及要修改的值(name)進行設定,最後透過Connection物件的commit()方法儲存。如下範例:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 修改資料SQL語法
command = "UPDATE charts SET name = %s WHERE id = %s"
# 執行指令
cursor.execute(command, ("Learn Code With Mike", "5XeeDbHfELRucAOX6n"))
#儲存變更
conn.commit()
八、刪除資料表資料
如果要刪除charts資料表中,id為-ovxsQyee7WVLKuikC的資料,需執行DELETE的SQL語法,並且設定主鍵(id)值,最後透過Connection物件的commit()方法儲存。
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 刪除特定資料指令
command = "DELETE FROM charts WHERE id = %s"
# 執行指令
cursor.execute(command, ("-ovxsQyee7WVLKuikC",))
#儲存變更
conn.commit()
九、小結
本文利用實際的案例,從MySQL資料庫的環境建置開始,接著將Python專案中取得的KKBOX Open API資料存進去,並且說明實務上常用的新增、查詢、修改及刪除資料操作,透過本文的教學,相信各位對於Python存取資料庫有了基本的概念。如果在練習的過程中,有遇到任何問題,歡迎留言分享。
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
文章清晰易懂非常有幫助,謝謝您的分享
回覆刪除感謝您的支持 :)
刪除好棒! 竟然有這樣的資源來帶領我。
回覆刪除想請問如何在vscode上用python連接mysql呢?
回覆刪除看起來跟原po寫得一樣
刪除