FastCRUD 使用教程
1. 项目介绍
FastCRUD 是一个为 FastAPI 设计的 Python 包,它提供了强大的异步 CRUD 操作和灵活的端点创建工具。通过高级特性如自动检测连接条件、动态排序以及偏移量和游标分页,FastCRUD 能够简化数据库交互过程,并优化性能。
FastCRUD 的主要特点包括:
- 完全异步:利用 Python 的异步特性进行非阻塞数据库操作。
- 支持 SQLAlchemy 2.0:与最新版本的 SQLAlchemy 配合使用,提供健壮的数据库交互。
- 强大的 CRUD 功能:提供高效的 CRUD 操作,并支持连接操作。
- 动态查询构建:支持动态构建复杂查询,包括过滤、排序和分页。
- 高级连接操作:简化与其他模型的 SQL 连接操作,自动检测连接条件。
- 内置偏移量分页:提供即用的偏移量分页。
- 游标分页:为大数据集实现高效分页,适合无限滚动界面。
- 模块化和可扩展:设计易于扩展和定制,以满足不同需求。
- 自动生成端点:简化了添加 CRUD 端点的过程,支持自定义依赖和配置。
2. 项目快速启动
在开始使用 FastCRUD 之前,确保你的项目已经安装了以下依赖:
- Python 3.9 或更高版本
- FastAPI
- SQLAlchemy 2.0.21 或更高版本
- Pydantic 2.4.1 或更高版本
- SQLAlchemy-Utils(可选,但推荐)
安装 FastCRUD:
pip install fastcrud
以下是一个简单的示例,演示如何使用 FastCRUD 的 crud_router
自动创建端点:
models.py
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class Item(Base):
__tablename__ = 'items'
id = Column(Integer, primary_key=True)
name = Column(String)
description = Column(String)
schemas.py
from pydantic import BaseModel
class ItemCreateSchema(BaseModel):
name: str
description: str
class ItemUpdateSchema(BaseModel):
name: str
description: str
main.py
from typing import AsyncGenerator
from fastapi import FastAPI
from fastcrud import FastCRUD, crud_router
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
from yourapp.models import Base, Item
from yourapp.schemas import ItemCreateSchema, ItemUpdateSchema
DATABASE_URL = "sqlite+aiosqlite:///./test.db"
engine = create_async_engine(DATABASE_URL, echo=True)
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
async def get_session() -> AsyncGenerator[AsyncSession, None]:
async with async_session() as session:
yield session
async def lifespan(app: FastAPI):
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
yield
app = FastAPI(lifespan=lifespan)
item_router = crud_router(
session=get_session,
model=Item,
create_schema=ItemCreateSchema,
update_schema=ItemUpdateSchema,
path="/items",
tags=["Items"],
)
app.include_router(item_router)
启动 FastAPI 服务后,你将拥有自动生成的 CRUD 端点。
3. 应用案例和最佳实践
FastCRUD 的设计使其适用于各种需要 CRUD 操作的场景,以下是一些应用案例和最佳实践:
- RESTful API 服务:构建标准 RESTful API,提供对资源的增删改查操作。
- 数据管理界面:为内部管理工具创建数据管理端点,实现快速的数据检索和更新。
- 前后端分离应用:在后端提供数据操作接口,前端应用通过这些接口进行数据交互。
最佳实践包括:
- 利用 FastCRUD 的自动端点生成功能减少重复代码。
- 在需要更细粒度控制时,直接在 FastAPI 端点中集成 FastCRUD。
- 使用 Pydantic 模型进行数据验证和序列化,确保数据的一致性和正确性。
4. 典型生态项目
FastCRUD 作为一个 FastAPI 的生态项目,与以下项目配合使用效果最佳:
- SQLAlchemy:用于数据库操作的 ORM 工具。
- Pydantic:用于数据验证和序列化的库。
- FastAPI:构建 API 的现代框架。
通过整合这些项目,开发者可以快速搭建起高效、健壮的 RESTful 服务。