引言
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 支持并基于标准 Python 类型提示。它旨在快速开发,同时易于阅读和维护。本文将深入探讨如何在 FastAPI 中进行数据验证,以及如何高效地与数据库交互。
数据验证
1. 基础数据验证
FastAPI 使用 Pydantic 库进行数据验证。Pydantic 是一个强大的数据验证和设置管理库,用于 Python 3.6+ 类型注解。
示例:创建一个简单的模型
from pydantic import BaseModel
class Item(BaseModel):
id: int
name: str
description: str = None
price: float
tax: float = None
在这个模型中,我们定义了一个名为 Item 的类,它包含五个属性:id、name、description、price 和 tax。description 和 tax 属性被设置为可选。
示例:使用 Pydantic 模型验证数据
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
if item.price <= 0:
raise HTTPException(status_code=400, detail="Price must be greater than 0")
return item
在这个例子中,我们创建了一个 FastAPI 应用,并定义了一个 POST 路由,它接受一个 Item 对象作为参数。如果 price 小于等于 0,我们将返回一个 400 状态码的 HTTP 异常。
2. 高级数据验证
FastAPI 支持高级数据验证,例如使用正则表达式验证字符串格式。
示例:使用正则表达式验证字符串
from pydantic import BaseModel, EmailStr
class Item(BaseModel):
name: str = None
description: str = None
price: float
tax: float = None
email: EmailStr = None
在这个例子中,我们添加了一个 email 属性,它使用 EmailStr 类型,该类型是 Pydantic 提供的一个特殊类型,用于验证电子邮件地址格式。
高效数据库交互
1. 使用SQLAlchemy
FastAPI 通常与 SQLAlchemy 结合使用,这是一个流行的 Python SQL 工具包和对象关系映射(ORM)系统。
示例:创建一个 SQLAlchemy 模型
from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
description = Column(String, index=True)
price = Column(Float)
tax = Column(Float)
在这个例子中,我们定义了一个 Item 类,它映射到数据库中的 items 表。
示例:使用 SQLAlchemy 与数据库交互
engine = create_engine("sqlite:///./test.db")
Base.metadata.create_all(bind=engine)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
@app.on_event("startup")
def startup():
db = SessionLocal()
try:
db.execute("SELECT 1")
db.commit()
except:
db.rollback()
finally:
db.close()
@app.on_event("shutdown")
def shutdown():
SessionLocal.remove()
在这个例子中,我们创建了一个 SQLite 数据库,并定义了一个 SessionLocal 类,用于在 FastAPI 应用程序中创建数据库会话。
2. 使用ORM进行数据操作
使用 SQLAlchemy ORM,我们可以轻松地执行 CRUD 操作。
示例:添加一个新项目
@app.post("/items/")
async def create_item(item: Item):
db = SessionLocal()
db.add(item)
db.commit()
db.refresh(item)
return item
在这个例子中,我们创建了一个新的 Item 对象,并将其添加到数据库中。
总结
FastAPI 是一个功能强大的 Web 框架,可以轻松地进行数据验证和数据库交互。通过使用 Pydantic 进行数据验证和 SQLAlchemy 进行数据库操作,我们可以构建高效、可维护的 API。希望本文能帮助你快速上手 FastAPI!
