要点
- 使用FastAPI开发RESTful API,创建端点,自定义响应,结构化多路由。
- Pydantic数据验证库数据建模,创建依赖项注入。开发数据库和对象关系映射,SQLAlchemy,Tortoise ORM,MongoDB。
- 建立权限和安全机制,建立Websockets双路通讯。使用pytest和HTTPX异步测试API
- 开发NumPy,pandas数据科学API以及scikit-learn分类机器学习模型。创建预测性API端点,以及OpenCV,WebSockets实时人脸识别。
- 项目:开发自然语言处理语义分析API ,分布式文本图像人工智能系统
Python和FastAPI利用SQLAlchemy示例
在不断发展的 Web 开发领域,FastAPI 已成为明星表演者,提供速度和简单性。 当与强大而灵活的 ORM(对象关系映射)工具 SQLAlchemy 结合使用时,这对组合将成为一股不可忽视的力量。FastAPI 因其速度以及自动生成 OpenAPI 和 JSON 架构文档而广受欢迎。 它基于标准 Python 类型提示,简单性使其成为希望在不牺牲性能的情况下快速构建 API 的开发人员的绝佳选择。
另一方面,SQLAlchemy 作为 Python 的强大且多功能的 ORM 表现出色。 它抽象了数据库交互,允许开发人员使用 Python 对象而不是原始 SQL 查询。 这不仅简化了数据库操作,而且使代码更具可读性和可维护性。
FastAPI-SQLAlchemy充当桥梁,将FastAPI与SQLAlchemy无缝连接。 它简化了集成过程,使您可以更轻松地在 FastAPI 应用程序中处理数据库操作。 让我们分解要点并为您提供一个实践示例。
现在,让我们创建一个 FastAPI 应用程序并使用 fastapi_sqlalchemy 扩展集成 SQLAlchemy:
from fastapi import FastAPI, Depends, HTTPException
from fastapi_sqlalchemy import SQLALCHEMY_DATABASE_URL, SQLAlchemy
app = FastAPI()
DATABASE_URL = "sqlite:///./test.db"
database = SQLAlchemy(DATABASE_URL)
class Item(database.BaseModel):
__tablename__ = "items"
id = database.Column(database.Integer, primary_key=True, index=True)
name = database.Column(database.String, index=True)
def get_db():
db = database.SessionLocal()
try:
yield db
finally:
db.close()
在上面的示例中,我们创建了一个 FastAPI 应用程序并初始化了 FastAPI-SQLAlchemy 扩展。此外,我们定义了一个简单的 SQLAlchemy 模型 Item 来表示数据库中的项目。现在,让我们使用 FastAPI-SQLAlchemy 实现 CRUD(创建、读取、更新、删除)操作:
from sqlalchemy.orm import Session
# Create an item
@app.post("/items/")
def create_item(item: Item, db: Session = Depends(get_db)):
db.add(item)
db.commit()
db.refresh(item)
return item
# Get a specific item by ID
@app.get("/items/{item_id}")
def read_item(item_id: int, db: Session = Depends(get_db)):
item = db.query(Item).filter(Item.id == item_id).first()
if item:
return item
raise HTTPException(status_code=404, detail="Item not found")
# Update an item's name
@app.put("/items/{item_id}")
def update_item(item_id: int, new_name: str, db: Session = Depends(get_db)):
item = db.query(Item).filter(Item.id == item_id).first()
if item:
item.name = new_name
db.commit()
db.refresh(item)
return item
raise HTTPException(status_code=404, detail="Item not found")
# Delete an item
@app.delete("/items/{item_id}")
def delete_item(item_id: int, db: Session = Depends(get_db)):
item = db.query(Item).filter(Item.id == item_id).first()
if item:
db.delete(item)
db.commit()
return {"message": "Item deleted successfully"}
raise HTTPException(status_code=404, detail="Item not found")
这些是基本的 CRUD 操作,但它们展示了 FastAPI-SQLAlchemy 为数据库交互带来的简单性。函数参数中的 Depends(get_db) 确保每个路由都可以访问数据库会话。