Yoru Karu Studio

程式設計學習筆記 | 生活心得

02-4. 巢狀模型與繼承 ⏱️ 閱讀時間: 12 分鐘 🎯 難度: ⭐⭐ (基礎) 🤔 一句話解釋 巢狀模型讓你組合複雜的資料結構,繼承讓你重用共同的欄位定義。 🏠 巢狀模型 基本巢狀 from pydantic import BaseModel from typing import Optional class Address(BaseModel): """地址""" city: str street: str zip_code: str class User(BaseModel): """使用者(包含地址)""" name: str email: str address: Address # 巢狀模型 # 使用 user = User( name="John", email="john@example.com", address={ "city": "台北市", "street": "信義路100號", "zip_code": "110" } ) # 存取巢狀屬性 print(user.address.city) # 台北市選填的巢狀模型 from pydantic import BaseModel from typing import Optional class Address(BaseModel): city: str street: str class Company(BaseModel): name: str website: Optional[str] = None class User(BaseModel): name: str email: str address: Optional[Address] = None # 整個地址可選 company: Optional[Company] = None # 整個公司可選 # 可以不提供巢狀模型 user = User(name="John", email="john@example.

02-5. 序列化與反序列化 ⏱️ 閱讀時間: 12 分鐘 🎯 難度: ⭐⭐ (基礎) 🤔 一句話解釋 序列化是把 Python 物件轉成 JSON,反序列化是把 JSON 轉回 Python 物件。 Python 物件 ──序列化──▶ JSON/Dict ──反序列化──▶ Python 物件 (User) model_dump() {"name":...} model_validate() (User) 📤 序列化(Python → JSON) model_dump() - 轉換為字典 from pydantic import BaseModel from datetime import datetime class User(BaseModel): name: str email: str age: int created_at: datetime user = User( name="John", email="john@example.com", age=25, created_at=datetime(2025, 1, 1, 12, 0, 0) ) # 基本轉換 print(user.

02-6. Settings 管理與環境變數 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐ (基礎) 🤔 一句話解釋 pydantic-settings 讓你用型別安全的方式管理環境變數和設定檔。 🎯 為什麼需要設定管理? 常見問題 # ❌ 硬編碼 DATABASE_URL = "postgresql://user:password@localhost/db" # ❌ 沒有驗證 import os DATABASE_URL = os.getenv("DATABASE_URL") # 可能是 None # ❌ 沒有型別 DEBUG = os.getenv("DEBUG") # 字串 "true",不是 bool使用 pydantic-settings # ✅ 型別安全 + 自動驗證 from pydantic_settings import BaseSettings class Settings(BaseSettings): database_url: str debug: bool = False settings = Settings() # 自動讀取環境變數 📦 安裝 pip install pydantic-settings 🔧 基本用法 定義 Settings from pydantic_settings import BaseSettings class Settings(BaseSettings): # 必填(沒有預設值) database_url: str secret_key: str # 選填(有預設值) debug: bool = False app_name: str = "My App" port: int = 8000 settings = Settings()設定環境變數 # .

02-7. Pydantic v1 vs v2 遷移指南 ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐⭐ (進階) 🤔 一句話解釋 Pydantic v2 用 Rust 重寫核心,速度快 5-50 倍,但 API 有重大變更。 🚀 為什麼要遷移到 v2? 效能提升 驗證速度比較(相對於 v1): ┌────────────────────────────────────────────────┐ │ 簡單模型 ████████████████████ 5x 更快 │ │ 巢狀模型 ████████████████████████ 17x 更快│ │ 大型列表 ████████████████████████████ 50x │ └────────────────────────────────────────────────┘主要改進 改進項目 說明 效能 Rust 核心,速度提升 5-50 倍 嚴格模式 支援 strict=True 關閉自動轉型 更好的錯誤訊息 錯誤更詳細、更易讀 Annotated 支援 更好的型別提示整合 JSON Schema 更標準的 JSON Schema 輸出 📋 API 變更對照表 模型方法 v1 方法 v2 方法 說明 .

03-1. SQLAlchemy 基礎 ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐ (基礎) 🤔 一句話解釋 SQLAlchemy 是 Python 最強大的 ORM,讓你用 Python 物件操作資料庫,不用寫 SQL。 🎯 為什麼選擇 SQLAlchemy? ORM vs 原生 SQL ❌ 原生 SQL: cursor.execute("SELECT * FROM users WHERE age > 18 AND status = 'active'") ✅ SQLAlchemy ORM: session.query(User).filter(User.age > 18, User.status == "active")主要優勢 優勢 說明 型別安全 IDE 自動補全,減少錯誤 SQL 注入防護 自動參數化查詢 跨資料庫 換資料庫只需改設定 關聯管理 自動處理 JOIN 和 Foreign Key 遷移支援 配合 Alembic 管理 Schema 📦 安裝 # SQLAlchemy 2.

03-2. 關聯關係 ⏱️ 閱讀時間: 20 分鐘 🎯 難度: ⭐⭐⭐ (進階) 🤔 一句話解釋 SQLAlchemy 的 relationship 讓你用 Python 物件存取關聯資料,不用手動寫 JOIN。 🔗 關聯類型總覽 ┌─────────────────────────────────────────────────────────────┐ │ 關聯類型 │ ├─────────────────────────────────────────────────────────────┤ │ One-to-Many (一對多) │ │ ┌─────┐ ┌─────┐ │ │ │User │ ──1:N──▶│Post │ 一個使用者有多篇文章 │ │ └─────┘ └─────┘ │ ├─────────────────────────────────────────────────────────────┤ │ Many-to-One (多對一) │ │ ┌─────┐ ┌────────┐ │ │ │Post │ ──N:1──▶│Category│ 多篇文章屬於一個分類 │ │ └─────┘ └────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ One-to-One (一對一) │ │ ┌─────┐ ┌───────┐ │ │ │User │ ──1:1──▶│Profile│ 一個使用者有一個個人資料 │ │ └─────┘ └───────┘ │ ├─────────────────────────────────────────────────────────────┤ │ Many-to-Many (多對多) │ │ ┌─────┐ ┌─────┐ │ │ │Post │ ──N:N──▶│ Tag │ 文章和標籤的多對多關係 │ │ └─────┘ └─────┘ │ └─────────────────────────────────────────────────────────────┘ 🔢 One-to-Many(一對多) 範例:使用者與文章 from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime from sqlalchemy.
0%