WeHelp
MySQL 是一套穩定、高效能的資料庫管理系統,是全球網頁開發與應用程式最常搭配的核心工具之一。
  1. MySQL 下載安裝
  2. 啟動、連線測試
  3. Database 管理
  4. SQL 資料表管理
  5. SQL 資料管理
  6. SQL 資料取得、篩選
  7. 欄位的資料型態
  8. 資料交易簡介、操作
  9. 使用者管理
  10. Python 程式連線
  11. Node.js 程式連線
  12. PHP 程式連線
Python 程式連線
Python 連線 MySQL 常用套件是 `mysql-connector-python`,也可以使用 `PyMySQL`。以下以官方 Connector/Python 為例。 ## 1. 安裝套件 ```bash pip install mysql-connector-python ``` ## 2. 建立資料庫連線 ```python import mysql.connector conn = mysql.connector.connect( host="127.0.0.1", # MySQL 主機 port=3306, # MySQL 埠號 user="root", # 使用者名稱 password="your_password", database="testdb", # 要使用的資料庫 charset="utf8mb4" ) print("資料庫連線成功") ``` 也可以先檢查是否連線成功: ```python if conn.is_connected(): print("Connected") ``` 連線參數通常包括: | 參數 | 說明 | |---|---| | `host` | MySQL 伺服器位址 | | `port` | 預設為 `3306` | | `user` | MySQL 使用者 | | `password` | 密碼 | | `database` | 要使用的資料庫 | | `charset` | 建議使用 `utf8mb4` | --- ## 3. 建立資料表 要執行 SQL,必須先建立游標(cursor)。 ```python cursor = conn.cursor() sql = """ CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(200) UNIQUE, age INT ) """ cursor.execute(sql) conn.commit() cursor.close() conn.close() ``` `commit()` 的作用是確認並儲存 `INSERT`、`UPDATE`、`DELETE` 等異動。 --- ## 4. 執行 INSERT ```python import mysql.connector conn = mysql.connector.connect( host="127.0.0.1", user="root", password="your_password", database="testdb" ) cursor = conn.cursor() sql = """ INSERT INTO users (name, email, age) VALUES (%s, %s, %s) """ values = ("Alice", "alice@example.com", 25) cursor.execute(sql, values) conn.commit() print("新增資料的 ID:", cursor.lastrowid) cursor.close() conn.close() ``` ### 使用多筆資料 ```python users = [ ("Bob", "bob@example.com", 30), ("Carol", "carol@example.com", 28), ("David", "david@example.com", 35) ] cursor.executemany(sql, users) conn.commit() print("新增筆數:", cursor.rowcount) ``` 注意:MySQL Connector 使用 `%s` 作為參數佔位符,不要自行用字串格式化 SQL,例如: ```python # 不建議,容易造成 SQL Injection sql = f"SELECT * FROM users WHERE name = '{name}'" ``` 應改用參數化查詢: ```python sql = "SELECT * FROM users WHERE name = %s" cursor.execute(sql, (name,)) ``` --- ## 5. 執行 SELECT 並取得資料 ### 取得一筆資料:`fetchone()` ```python cursor = conn.cursor() sql = "SELECT id, name, email, age FROM users WHERE id = %s" cursor.execute(sql, (1,)) row = cursor.fetchone() if row is not None: print(row) print("ID:", row[0]) print("姓名:", row[1]) print("Email:", row[2]) print("年齡:", row[3]) else: print("找不到資料") ``` 結果可能如下: ```python (1, 'Alice', 'alice@example.com', 25) ``` --- ### 取得全部資料:`fetchall()` ```python sql = "SELECT id, name, email, age FROM users ORDER BY id" cursor.execute(sql) rows = cursor.fetchall() for row in rows: print(row) ``` --- ### 逐筆讀取資料 資料很多時,不一定要一次使用 `fetchall()`,可以逐筆處理: ```python cursor.execute("SELECT id, name, email FROM users") for row in cursor: print(row) ``` --- ## 6. 以欄位名稱取得資料 預設查詢結果是 tuple。如果希望使用欄位名稱,可以建立 dictionary cursor: ```python cursor = conn.cursor(dictionary=True) cursor.execute("SELECT id, name, email, age FROM users") rows = cursor.fetchall() for row in rows: print(row["id"], row["name"], row["email"], row["age"]) ``` 資料格式會類似: ```python { "id": 1, "name": "Alice", "email": "alice@example.com", "age": 25 } ``` --- ## 7. 執行 UPDATE 和 DELETE ### UPDATE ```python sql = """ UPDATE users SET age = %s WHERE id = %s """ cursor.execute(sql, (26, 1)) conn.commit() print("更新筆數:", cursor.rowcount) ``` ### DELETE ```python sql = "DELETE FROM users WHERE id = %s" cursor.execute(sql, (1,)) conn.commit() print("刪除筆數:", cursor.rowcount) ``` --- ## 8. 使用例外處理與正確關閉資源 完整範例: ```python import mysql.connector from mysql.connector import Error conn = None cursor = None try: conn = mysql.connector.connect( host="127.0.0.1", port=3306, user="root", password="your_password", database="testdb", charset="utf8mb4" ) cursor = conn.cursor(dictionary=True) sql = """ INSERT INTO users (name, email, age) VALUES (%s, %s, %s) """ cursor.execute(sql, ("Alice", "alice@example.com", 25)) conn.commit() cursor.execute( "SELECT * FROM users WHERE email = %s", ("alice@example.com",) ) user = cursor.fetchone() print(user) except Error as e: print("資料庫錯誤:", e) if conn is not None and conn.is_connected(): conn.rollback() finally: if cursor is not None: cursor.close() if conn is not None and conn.is_connected(): conn.close() print("資料庫連線已關閉") ``` --- ## 9. 使用 `with` 自動管理游標 部分情況下,可以使用 `with` 自動關閉游標: ```python import mysql.connector conn = mysql.connector.connect( host="127.0.0.1", user="root", password="your_password", database="testdb" ) with conn.cursor(dictionary=True) as cursor: cursor.execute("SELECT * FROM users") rows = cursor.fetchall() for row in rows: print(row) conn.close() ``` --- ## 10. 基本流程總結 Python 操作 MySQL 的一般流程是: ```text 1. 安裝 MySQL Connector 2. 建立資料庫連線 3. 建立 cursor 4. 使用 cursor.execute() 執行 SQL 5. SELECT 使用 fetchone()、fetchall() 取得資料 6. INSERT、UPDATE、DELETE 後執行 commit() 7. 發生錯誤時執行 rollback() 8. 關閉 cursor 和 connection ``` 最基本的範例可以簡化為: ```python import mysql.connector conn = mysql.connector.connect( host="localhost", user="root", password="your_password", database="testdb" ) cursor = conn.cursor() cursor.execute("SELECT * FROM users") for row in cursor.fetchall(): print(row) cursor.close() conn.close() ```
相關學習地圖、教學課程
Python 後端工程、資料庫
從 0 開始,成為後端工程師的學習路徑。