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

FastAPI 實(shí)戰(zhàn):打造高效的 CRUD 接口(增刪改查優(yōu)秀實(shí)踐)

數(shù)據(jù)庫(kù)
快速、安全、優(yōu)雅地構(gòu)建一套完整的數(shù)據(jù)庫(kù) API,是每個(gè)全棧工程師的基本功。本篇文章,我們用 FastAPI + Tortoise-ORM 實(shí)現(xiàn)最常見(jiàn)的 用戶信息表的 CRUD 接口。

本文你將學(xué)到:

  • 如何編寫(xiě)標(biāo)準(zhǔn)的增刪改查接口
  • 如何返回統(tǒng)一格式的響應(yīng)
  • 如何處理異常與不存在的數(shù)據(jù)
  • 如何編寫(xiě)清晰可維護(hù)的代碼結(jié)構(gòu)

1. 項(xiàng)目結(jié)構(gòu)一覽(適用于多模塊項(xiàng)目)

app/
├── api/
│   └── user.py         # 用戶接口
├── models/
│   └── user.py         # ORM 數(shù)據(jù)模型
├── schemas/
│   └── user.py         # Pydantic 請(qǐng)求 / 響應(yīng)模型
├── core/
│   └── db.py           # 數(shù)據(jù)庫(kù)初始化
├── main.py             # 項(xiàng)目入口

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. 請(qǐng)求與響應(yīng)模型(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 接口實(shí)現(xiàn)(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=["用戶"])

# ?? 創(chuàng)建用戶
@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

# ?? 獲取單個(gè)用戶
@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. 注冊(cè)數(shù)據(jù)庫(kù)(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. 項(xiàng)目入口(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. 測(cè)試建議(使用 Swagger 自動(dòng)文檔)

運(yùn)行項(xiàng)目后訪問(wèn):

http://localhost:8000/docs

你可以直接使用內(nèi)置的 Swagger UI 測(cè)試所有接口,無(wú)需手動(dòng)構(gòu)造請(qǐng)求!

總結(jié)

本篇你學(xué)到了如何基于 FastAPI 和 Tortoise-ORM 構(gòu)建一套標(biāo)準(zhǔn)的增刪改查接口。結(jié)構(gòu)清晰、代碼優(yōu)雅、響應(yīng)規(guī)范,是后續(xù)擴(kuò)展的基礎(chǔ)!

責(zé)任編輯:趙寧寧 來(lái)源: Ssoul肥魚(yú)
相關(guān)推薦

2012-04-19 10:06:16

ibmdw

2025-05-12 10:02:05

2021-08-09 13:34:14

Python開(kāi)發(fā)數(shù)據(jù)

2025-01-08 12:36:52

2019-10-10 09:00:30

云端云遷移云計(jì)算

2023-02-27 07:37:56

Curl操作SQL

2020-05-28 16:50:59

源碼分析 MybatisJava

2023-06-08 08:13:43

2021-02-22 07:55:59

低代碼分析

2024-05-20 10:00:00

代碼Python編程

2019-05-16 09:00:06

云原生監(jiān)控日志管理

2024-11-18 00:22:34

2019-11-07 15:39:36

數(shù)據(jù)庫(kù)MySQL文章

2020-10-29 08:39:45

JSONJava對(duì)象

2012-03-21 09:49:42

Java

2012-04-12 09:23:15

達(dá)夢(mèng)數(shù)據(jù)庫(kù)

2022-07-25 14:24:53

Docker容器安全

2024-08-29 08:58:30

JPA編寫(xiě)數(shù)據(jù)操

2021-10-18 13:26:15

大數(shù)據(jù)數(shù)據(jù)分析技術(shù)

2025-05-12 08:45:00

模塊化FastAPI路由分發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩欧美亚洲 | 欧美精品一区二区在线观看 | 亚洲欧美成人在线 | 国产中文字幕在线 | 99在线观看视频 | 国产精品美女久久久久久久久久久 | 日韩欧美第一页 | 精久久久 | 国产精品久久久久久久久久 | 久久久久久久久久久久久久av | 欧美视频在线一区 | 亚洲精品在线观看网站 | 成人欧美一区二区三区白人 | 日本久久网站 | 最新免费黄色网址 | 亚洲精品天堂 | 国产在线视频三区 | 天天影视色综合 | 黄色网络在线观看 | 黄色片视频网站 | 欧美性久久 | 日韩欧美国产精品 | 欧美在线视频一区 | 久久艹免费视频 | 亚洲一区二区免费 | 99免费精品 | 玖玖玖在线观看 | 亚洲精品综合 | 国产欧美一级 | 久久久久久国产 | 91在线导航| 青春草91| 中文字幕一区二区三区四区五区 | 国产精久久久久久久妇剪断 | 中文字幕免费视频 | 夜夜骑av| 久久精品视频91 | 视频一区二区中文字幕 | 一区二区在线不卡 | 日韩成人免费视频 | 亚洲欧美国产精品一区二区 |