關聯式資料庫 Relational Database Management System 簡稱 RDBMS,可以將多個資料表依相關欄位組合成一張大的資料表。因為每張資料表的連結都是使用指標連結,所以組合的速度非常快速。
關聯式資料表在 MySQL 寫在 Views 中,又稱為 View 表,開啟 Workbench 連接資料庫後,即可看到 Views 的項目。但寫在 MySQL Views 中會打亂換行,造成維護的困難,所以建議寫在 Python 的原始代碼中。
安裝套件
本例需安裝套件
pip install mysql-connector-python pandas
join
join 語法
from a join b on (a.欄位 = b.欄位)
請查看如下 python 代碼
import mysql.connector as mysql
import pandas as pd
conn=mysql.connect(
host="host",
user="account",
password="password",
database="db"
)
cursor=conn.cursor()
cmd="""
select
a.銷售單號 AS 銷售單號,
a.商品編號 AS 商品編號,
a.單價 AS 單價,
a.數量 AS 數量,
b.日期 AS 日期,
b.時間 AS 時間
from 銷售明細 a
join 銷售單號 b on (a.銷售單號=b.銷售單號)
"""
cursor.execute(cmd)
rs=cursor.fetchall()
columns=[d[0] for d in cursor.description]
df=pd.DataFrame(data=rs, columns=columns)
print(df)
結果 :
銷售單號 商品編號 單價 數量 日期 時間
0 0001 0001 25.0 2 2024-08-01 0 days 08:50:00
1 0001 0002 10.0 1 2024-08-01 0 days 08:50:00
View 表連結
上述的 View 表可以和其它資料表再度 join 成另一張大表
import mysql.connector as mysql
import pandas as pd
conn=mysql.connect(
host="host",
user="account",
password="password",
database="db"
)
cursor=conn.cursor()
cmd="""
select
a.銷售單號 AS 銷售單號,
a.商品編號 AS 商品編號,
a.單價 AS 單價,
a.數量 AS 數量,
c.品名 AS 品名,
c.規格 AS 規格,
b.日期 AS 日期,
b.時間 AS 時間
from 銷售明細 a
join 銷售單號 b on (a.銷售單號=b.銷售單號)
join 商品資料 c on (a.商品編號=c.商品編號)
"""
cursor.execute(cmd)
rs=cursor.fetchall()
columns=[d[0] for d in cursor.description]
df=pd.DataFrame(data=rs, columns=columns)
print(df)
結果:
銷售單號 商品編號 單價 數量 品名 規格 日期 時間
0 0001 0001 25.0 2 炒麵 40g 2024-08-01 0 days 08:50:00
1 0001 0002 10.0 1 可樂果 小包裝 2024-08-01 0 days 08:50:00
Python 完整代碼
完整代碼如下
import mysql.connector as mysql import pandas as pd conn=mysql.connect( host="host", user="帳號", password="密碼", database="cashier" ) cursor=conn.cursor() cmd=""" select a.銷售單號 AS 銷售單號, a.商品編號 AS 商品編號, c.品名 AS 品名, c.規格 AS 規格, a.單價 AS 單價, a.數量 AS 數量, b.日期 AS 日期, b.時間 AS 時間, d.姓名 AS 員工編號 from 銷售明細 a join 銷售單號 b on (a.銷售單號=b.銷售單號) join 商品資料 c on (a.商品編號=c.商品編號) join 員工資料 d on (b.員工編號=d.員工編號) where a.商品編號 = '0001' """ cursor.execute(cmd) rs=cursor.fetchall() columns=[d[0] for d in cursor.description] df=pd.DataFrame(data=rs, columns=columns) print(df) 結果: 銷售單號 商品編號 品名 規格 單價 數量 日期 時間 員工編號 0 0001 0001 炒麵 40g 25.0 2 2024-08-01 0 days 08:50:00 吳明學
將 view 表存入資料庫 Views
資料庫裏的 Views 是一種虛擬表格,上述的 view 表可以使用 “create view 表稱 as” 直接存入資料庫的 Views ,以供日後直接查詢。
import mysql.connector as mysql import pandas as pd conn=mysql.connect( host="mahaljsp.ddns.net", user="thomas", password="Mahal$0507", database="cashier" ) cursor=conn.cursor() cmd="drop view if exists 銷售明細view" cursor.execute(cmd) cmd=""" create view 銷售明細view AS select a.銷售單號 AS 銷售單號, a.商品編號 AS 商品編號, a.單價 AS 單價, a.數量 AS 數量, c.品名 AS 品名, c.規格 AS 規格, b.日期 AS 日期, b.時間 AS 時間 from 銷售明細 a join 銷售單號 b on (a.銷售單號=b.銷售單號) join 商品資料 c on (a.商品編號=c.商品編號) """ cursor.execute(cmd) #供日後直接進行查詢 cmd="select * from 銷售明細view" cursor.execute(cmd) rs=cursor.fetchall() conn.close() columns=[d[0] for d in cursor.description] df=pd.DataFrame(data=rs, columns=columns) print(df)