## 1. 資料庫介紹 資料庫是用來儲存和管理資料的工具,常見的類型有以下幾種: * **SQLite** 一種輕量級的嵌入式資料庫,適合小型專案或單機應用。 不需要伺服器,資料直接存儲在檔案中。 優點:簡單易用、無需安裝伺服器、佔用資源少。 用途:手機應用、桌面應用、快速測試。 * **MySQL** 一種關聯式資料庫管理系統,需要伺服器支持。 適合中大型專案,支援多用戶並發操作。 優點:穩定、性能優越、廣泛支持。 用途:網站後端、企業應用系統。 * **NoSQL(如 MongoDB)** 非關聯式資料庫,使用文件、鍵值對等格式儲存資料。 適合處理結構多變或非結構化資料。 優點:擴展性高、靈活性強。 用途:即時數據分析、大規模分散式應用。 ## 2. SQLite 資料庫結構 * **資料庫 (Database)** SQLite 的資料庫是一個單一的檔案,所有資料都儲存在這個檔案中 ex: **my_database.db** 特點:資料庫檔案可以直接拷貝、備份,跨平台兼容性強。 * **資料表 (Table)** 資料表是儲存數據的核心單位,每個資料表類似於一個 **Excel 的工作表**,由行 (row) 和列 (column) 組成。 結構: 列 (Column):定義資料的屬性或欄位,例如 id, name, email。 行 (Row):表示具體的數據,例如一名用戶的資訊。 ![image](https://hackmd.io/_uploads/r1m3bK8V1l.png) * **標題的資料型態** (Data Types) **INTEGER**:整數,例如 1, 42。 **REAL**:浮點數,例如 3.14, 2.71。 **TEXT**:文字,例如 'Hello', 'SQLite'。 **BLOB**:二進制資料,例如圖片、音頻文件。 **NULL**:空值。 * **主鍵 (Primary Key)** 每個資料表通常會有一個Primary Key來唯一標識每一行數據。SQLite 支援自動生成主鍵值。 ex: 上面圖片中的**id** ## 3.創建資料庫 ``` import sqlite3 # 連接 SQLite 資料庫(若無檔案則會自動建立) conn = sqlite3.connect("sample.db") cursor = conn.cursor() # 建立資料表 cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL ) """) ``` 執行後可以看到資料夾下多了一個sample.db ![image](https://hackmd.io/_uploads/H1KDmK8V1g.png) ### DB Browser for SQLite 一般來說需要在終端機輸入sqlite的語法才能查看資料庫的內容 但如果使用DB Browser就可以直接將資料庫可視化並做一些操作 https://sqlitebrowser.org/dl/ ### 點選開啟資料庫後選擇剛才新增的db ![image](https://hackmd.io/_uploads/SJpLVKU4yx.png) ### 點選"瀏覽資料"後就可以看到我們剛才新增的資料庫內容 但因為一開始只有先將標題的名字和資料型態定義好,內容需要再依據自己想要的資料做存放 ![image](https://hackmd.io/_uploads/rywqNtUEyg.png) ## 4. 讀取excel資料到資料庫 ### excel中的資料: ![image](https://hackmd.io/_uploads/BkgZDPK8EJl.png) ### 將excel和db的名字和路徑改成自己的樣子 Ex: ![image](https://hackmd.io/_uploads/Sys0wtUNye.png) 先在終端機中安裝pandas `pip install pandas openpyxl` ``` import sqlite3 import pandas as pd # 讀取 Excel 檔案 excel_file = "sample.xlsx" df = pd.read_excel(excel_file) # 連接 SQLite 資料庫(若無檔案則會自動建立) conn = sqlite3.connect("sample.db") cursor = conn.cursor() # 建立資料表 cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL ) """) # 插入資料到資料表 for _, row in df.iterrows(): cursor.execute( """ INSERT OR IGNORE INTO users (id, name, email) VALUES (?, ?, ?) """, (row["ID"], row["Name"], row["Email"]), ) # 確認變更 conn.commit() conn.close() print("資料已成功插入資料庫") ``` 最後到DB Brower中可以看到資料已經新增上去了: 如果沒有的話,可以按一下重新整理的按鈕 ![image](https://hackmd.io/_uploads/H1wdqKUVyg.png)