關聯式資料庫

      在〈關聯式資料庫〉中尚無留言

關聯式資料庫 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)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *