成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

FastAPI 實戰:打造高效的 CRUD 接口(增刪改查優秀實踐)

數據庫
快速、安全、優雅地構建一套完整的數據庫 API,是每個全棧工程師的基本功。本篇文章,我們用 FastAPI + Tortoise-ORM 實現最常見的 用戶信息表的 CRUD 接口。

本文你將學到:

  • 如何編寫標準的增刪改查接口
  • 如何返回統一格式的響應
  • 如何處理異常與不存在的數據
  • 如何編寫清晰可維護的代碼結構

1. 項目結構一覽(適用于多模塊項目)

app/
├── api/
│   └── user.py         # 用戶接口
├── models/
│   └── user.py         # ORM 數據模型
├── schemas/
│   └── user.py         # Pydantic 請求 / 響應模型
├── core/
│   └── db.py           # 數據庫初始化
├── main.py             # 項目入口

2. ORM 模型定義(models/user.py)

from tortoise.models import Model
from tortoise import fields

class User(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=50)
    email = fields.CharField(max_length=100, unique=True)

    class Meta:
        table = "user"

3. 請求與響應模型(schemas/user.py)

from pydantic import BaseModel, EmailStr

classUserCreate(BaseModel):
    name: str
    email: EmailStr

classUserUpdate(BaseModel):
    name: str | None = None
    email: EmailStr | None = None

classUserOut(BaseModel):
    id: int
    name: str
    email: EmailStr

    classConfig:
        orm_mode = True

4. CRUD 接口實現(api/user.py)

from fastapi import APIRouter, HTTPException
from app.models.user import User
from app.schemas.user import UserCreate, UserUpdate, UserOut

router = APIRouter(prefix="/users", tags=["用戶"])

# ?? 創建用戶
@router.post("", response_model=UserOut)
asyncdefcreate_user(user: UserCreate):
    exists = await User.get_or_none(email=user.email)
    if exists:
        raise HTTPException(status_code=400, detail="郵箱已存在")
    user_obj = await User.create(**user.dict())
    return user_obj

# ?? 獲取單個用戶
@router.get("/{user_id}", response_model=UserOut)
asyncdefget_user(user_id: int):
    user = await User.get_or_none(id=user_id)
    ifnot user:
        raise HTTPException(status_code=404, detail="用戶不存在")
    return user

# ?? 獲取所有用戶
@router.get("", response_model=list[UserOut])
asyncdeflist_users():
    returnawait User.all()

# ?? 更新用戶
@router.put("/{user_id}", response_model=UserOut)
asyncdefupdate_user(user_id: int, user: UserUpdate):
    user_obj = await User.get_or_none(id=user_id)
    ifnot user_obj:
        raise HTTPException(status_code=404, detail="用戶不存在")
    user_data = user.dict(exclude_unset=True)
    for k, v in user_data.items():
        setattr(user_obj, k, v)
    await user_obj.save()
    return user_obj

# ?? 刪除用戶
@router.delete("/{user_id}")
asyncdefdelete_user(user_id: int):
    deleted_count = await User.filter(id=user_id).delete()
    ifnot deleted_count:
        raise HTTPException(status_code=404, detail="用戶不存在")
    return {"message": "刪除成功"}

5. 注冊數據庫(core/db.py)

from tortoise.contrib.fastapi import register_tortoise
from fastapi import FastAPI

def init_db(app: FastAPI):
    register_tortoise(
        app,
        db_url="sqlite://db.sqlite3",
        modules={"models": ["app.models.user"]},
        generate_schemas=True,
        add_exception_handlers=True,
    )

6. 項目入口(main.py)

from fastapi import FastAPI
from app.core.db import init_db
from app.api import user

app = FastAPI(title="FastAPI CRUD 示例")

app.include_router(user.router)
init_db(app)

7. 測試建議(使用 Swagger 自動文檔)

運行項目后訪問:

http://localhost:8000/docs

你可以直接使用內置的 Swagger UI 測試所有接口,無需手動構造請求!

總結

本篇你學到了如何基于 FastAPI 和 Tortoise-ORM 構建一套標準的增刪改查接口。結構清晰、代碼優雅、響應規范,是后續擴展的基礎!

責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2012-04-19 10:06:16

ibmdw

2025-05-12 10:02:05

2021-08-09 13:34:14

Python開發數據

2023-02-27 07:37:56

Curl操作SQL

2020-05-28 16:50:59

源碼分析 MybatisJava

2025-01-08 12:36:52

2019-10-10 09:00:30

云端云遷移云計算

2023-06-08 08:13:43

2021-02-22 07:55:59

低代碼分析

2024-11-18 00:22:34

2019-11-07 15:39:36

數據庫MySQL文章

2024-05-20 10:00:00

代碼Python編程

2019-05-16 09:00:06

云原生監控日志管理

2020-10-29 08:39:45

JSONJava對象

2012-03-21 09:49:42

Java

2012-04-12 09:23:15

達夢數據庫

2022-07-25 14:24:53

Docker容器安全

2024-08-29 08:58:30

JPA編寫數據操

2009-11-13 15:54:26

ADO.NET數據庫操

2022-08-01 09:44:07

架構MySQL數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人网在线观看 | 日本精品视频在线观看 | 日韩色图视频 | 国产免费一区二区三区最新6 | 日韩www| 国产一区在线免费观看视频 | 中文字幕在线免费视频 | 国产精品亚洲综合 | 日本 欧美 三级 高清 视频 | 欧美一级欧美三级在线观看 | 午夜在线| 在线免费观看毛片 | 亚洲视频一区二区三区 | 国产成人精品一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 日韩在线观看网站 | 久久久一| 久久久久国产一级毛片 | 久久91精品| 欧美日韩国产精品一区 | 久久伊人一区二区 | 亚洲日本一区二区三区四区 | 国产精品日韩欧美一区二区三区 | 日本黄色免费视频 | 一区二区三区 在线 | 成年人免费网站 | 欧美精品在线免费 | 韩国久久精品 | 日日夜夜狠狠操 | 欧美福利久久 | 久久精品99| 浴室洗澡偷拍一区二区 | 婷婷不卡| 精品久久精品 | 欧美一级免费看 | 伊人无码高清 | av一区二区三区在线观看 | 国产伦精品一区二区三区精品视频 | 日韩成人av在线 | 日本a网站 | 天堂在线免费视频 |