手记

用FastAPI结合SQLAlchemy操作关系型数据库

集成关系型数据库

FastAPI 是一个现代、高性能的 Web 框架,基于 Python 3.7+,用于构建 API,它使用标准的 Python 类型提示。SQLAlchemy 是一个强大的 SQL 工具包和 Python 的对象关系映射 (ORM) 库。本文将探讨如何使用 SQLAlchemy 将关系型数据库与 FastAPI 集成在一起,并通过实际代码示例一步步指导您完成整个集成过程。

1. 搭建您的开发环境

首先,你需要安装必要的依赖;接着,用 pip 即可完成安装。

pip install fastapi uvicorn sqlalchemy asyncpg psycopg2-binary
2. 构建项目的架构

这里有一个你FastAPI项目的简单框架。

项目结构如下:
my_project/  
├── app/  
│   ├── __init__.py  
│   ├── main.py  
│   ├── models.py  
│   ├── crud.py  
│   ├── schemas.py  
│   └── database.py  
├── requirements.txt  
└── README.md
3. 设置一下数据库连接

创建一个名为 database.py 的文件来建立数据库连接和会话对象。

例子:**database.py**

从 sqlalchemy 导入 create_engine  # 导入 create_engine 函数
从 sqlalchemy.ext.declarative 导入 declarative_base  # 导入 declarative_base 类
从 sqlalchemy.orm 导入 sessionmaker  # 导入 sessionmaker 函数

SQLALCHEMY_DATABASE_URL = "postgresql://user:password@localhost/dbname"  # 数据库连接字符串

engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)  # 创建会话工厂
Base = declarative_base()  # 声明基类

def get_db():  # 获取数据库会话
    db = SessionLocal()  # 创建会话
    try:
        yield db
    finally:  # 最后关闭会话
        db.close()
4. 建模

models.py 文件里定义你的数据库模型。这些模型对应数据库中的表。

例子:**models.py**

从 sqlalchemy 导入 Column, Integer, String 
从 .database 导入 基础类 Base  # ORM基类

# 定义一个名为Item的数据库模型
class Item(Base):
    # 设置表名为items
    表名 = "items"

    # 定义一个整数类型的列,作为主键并建立索引,用于唯一标识每一项
    id = Column(Integer, primary_key=True, index=True)
    # 定义一个字符串类型的列,并建立索引
    name = Column(String, index=True)
    # 定义一个字符串类型的列,并建立索引
    description = Column(String, index=True)
5. 创建 Pydantic 模式定义

使用 Pydantic 模式定义来验证并序列化数据。你可以在这一步中,在 schemas.py 中创建这些数据模式。

例子:**schemas.py**

from pydantic import BaseModel  

# ItemBase类定义了一个基础模型,包含名称和描述。
class ItemBase(BaseModel):  
    name: str  
    description: str  

# ItemCreate类继承自ItemBase,定义了创建项的基础模型。
class ItemCreate(ItemBase):  
    pass  

# Item类继承自ItemBase,定义了项的详细模型,包含id字段。
class Item(ItemBase):  
    id: int  

    # Config类定义了orm模式为True,表示使用ORM模式。
    class Config:  
        orm_mode = True
6, 创建增删改查操作

crud.py 文件中定义 CRUD 操作 (创建、读取、更新、删除)。

例子:crud.py

from sqlalchemy.orm import Session  
from . import models, schemas  

def get_item(db: Session, item_id: int):
    """
    获取指定ID的项目
    """
    return db.query(models.Item).filter(models.Item.id == item_id).first()  

def get_items(db: Session, skip: int = 0, limit: int = 10):
    """
    获取偏移量为skip,限制为limit的项目列表
    """
    return db.query(models.Item).offset(skip).limit(limit).all()  

def create_item(db: Session, item: schemas.ItemCreate):
    """
    创建一个新的项目
    """
    db_item = models.Item(name=item.name, description=item.description)  
    db.add(db_item)  
    db.commit()  
    db.refresh(db_item)  
    return db_item
  1. API接口的创建.

main.py 文件中定义你的 FastAPI API 端点以便与数据库进行交互。

例子:main.py

from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from . import crud, models, schemas
from .database import SessionLocal, engine, get_db

models.Base.metadata.create_all(bind=engine)

app = FastAPI()

@app.post("/items/", response_model=schemas.Item)
def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):
    return crud.create_item(db=db, item=item)

@app.get("/items/{item_id}", response_model=schemas.Item)
def read_item(item_id: int, db: Session = Depends(get_db)):
    db_item = crud.get_item(db, item_id=item_id)
    if db_item is None:
        raise HTTPException(status_code=404, detail="找不到该项目")
    return db_item

@app.get("/items/", response_model=list[schemas.Item])
def read_items(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
    items = crud.get_items(db, skip=skip, limit=limit)
    return items
8. 运行应用

你可以使用 Uvicorn 启动你的 FastAPI 应用程序。

    uvicorn app.main:app --reload

这是一个命令,用于使用Uvicorn ASGI服务器运行Python应用程序。

导航到 http://127.0.0.1:8000 即可访问您的API。FastAPI 还提供了一个交互式的API文档页面,可通过 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 访问。

结论部分

将FastAPI与SQLAlchemy集成可以让你创建功能强大且高性能的API,并使用关系型数据库作为后端。按照上述步骤,你可以搭建一个稳健的FastAPI应用,利用SQLAlchemy实现高效的数据库操作。

了解最新的 FastAPI 技巧和最佳实践,紧跟技术潮流!关注我们的通讯,获取更多见解、技巧和独家内容!

现在就订阅,让FastAPI项目更上一层楼!

0人推荐
随时随地看视频
慕课网APP