Flask + SQLAlchemy:打造你的第一個資料庫驅動應用

,


在 Python Web 開發中,Flask 因其輕量且靈活的特性深受開發者喜愛。而 SQLAlchemy 是 Flask 常用的 ORM(Object-Relational Mapping),可以幫助我們更方便地操作資料庫。本篇文章將帶你從零開始,使用 Flask + SQLAlchemy 打造一個簡單的 資料庫驅動應用,並學習 基本的 CRUD 操作


1. 安裝 Flask 與 SQLAlchemy


首先,我們需要安裝 Flask 以及 Flask-SQLAlchemy:

pip install flask flask-sqlalchemy


2. 建立 Flask 應用


創建一個 app.py 作為 Flask 應用的主入口:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 設定資料庫 URI(這裡使用 SQLite 作為示範)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 初始化 SQLAlchemy
db = SQLAlchemy(app)

這段程式碼:

設定 Flask 應用

指定 SQLAlchemy 的資料庫 URI

關閉 SQLAlchemy 的事件追蹤(提升效能)

初始化 SQLAlchemy


3. 定義資料模型


在 SQLAlchemy 中,資料表是以 Python 類別(Class) 來表示的,以下是 User 資料表的模型:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)  # 自動遞增的主鍵
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

這裡:

• id 是主鍵,會自動遞增

• username 和 email 為 String 類型,且必須唯一

• __repr__ 方法 讓 User 物件在列印時能顯示易讀的名稱


4. 建立資料庫


在 Flask 互動模式(或直接執行 Python 腳本)中執行以下程式碼來創建資料庫:

from app import db
db.create_all()


這會根據我們的 User 模型,在 users.db 中建立對應的表結構。

5. 插入資料

我們可以使用 db.session.add() 來新增資料:

from app import db, User

# 創建新用戶
new_user = User(username="Alice", email="alice@example.com")

# 將用戶加入 session 並提交
db.session.add(new_user)
db.session.commit()

這段程式碼:

• 創建了一個 User 物件

• 加入 db.session 來追蹤變更

• db.session.commit() 確保變更儲存到資料庫

6. 查詢資料

使用 SQLAlchemy 提供的查詢方法:

# 取得所有用戶
users = User.query.all()
print(users)

# 查詢特定用戶
alice = User.query.filter_by(username="Alice").first()
print(alice)

這裡:

• User.query.all() 會回傳所有 User 記錄

• User.query.filter_by(username=”Alice”).first() 取得第一個符合條件的 User


7. 更新資料

alice = User.query.filter_by(username="Alice").first()
alice.email = "newalice@example.com"
db.session.commit()


這樣就能更新 Alice 的 email


8. 刪除資料

user_to_delete = User.query.filter_by(username="Alice").first()
db.session.delete(user_to_delete)
db.session.commit()


這會刪除 Alice,並將變更寫入資料庫。


9. 加入 Flask 路由


現在我們讓 Flask 提供 RESTful API 來管理 User:

from flask import request, jsonify

@app.route('/users', methods=['GET'])
def get_users():
    users = User.query.all()
    return jsonify([{"id": user.id, "username": user.username, "email": user.email} for user in users])

@app.route('/user', methods=['POST'])
def add_user():
    data = request.json
    new_user = User(username=data['username'], email=data['email'])
    db.session.add(new_user)
    db.session.commit()
    return jsonify({"message": "User created!"}), 201

這段程式碼:

• GET /users:回傳所有用戶的 JSON 格式

• POST /user:從 JSON 請求中取得 username 和 email,然後新增用戶


10. 啟動 Flask 應用

if __name__ == '__main__':
    app.run(debug=True)


執行:

python app.py

結語

透過本篇文章,我們學到了:

✅ 如何 建立 Flask 應用

✅ 如何 使用 SQLAlchemy 定義資料模型

✅ 如何 執行 CRUD 操作(新增、查詢、更新、刪除)

✅ 如何 建立 Flask API 來提供資料存取

下一步? 你可以嘗試:

使用 SQLite 以外的資料庫(如 MySQL 或 PostgreSQL)

實作使用者驗證(Flask-JWT)

加入前端(如 Vue.js / React)讓 Flask 提供 API 給前端使用

希望這篇文章能幫助你快速上手 Flask + SQLAlchemy!