在 FastAPI 中,你可以轻松地与 SQL(关系)数据库集成,常用的数据库包括 SQLite、MySQL、PostgreSQL 等。FastAPI 推荐使用 SQLAlchemy 这个强大的 SQL 工具和对象关系映射(ORM)库,以及 Alembic 用于数据库迁移。

下面是一个使用 FastAPI 和 SQLAlchemy 连接 SQLite 数据库的简单示例:

首先,确保安装以下依赖:
pip install fastapi uvicorn sqlalchemy databases[sqlite] alembic

然后,创建一个 main.py 文件:
from fastapi import FastAPI, HTTPException, Depends
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Session
from databases import Database

DATABASE_URL = "sqlite:///./test.db"
DATABASE_ENGINE = create_engine(DATABASE_URL)

# 使用 FastAPI 创建一个应用
app = FastAPI()

# 使用 databases 来处理异步数据库连接
database = Database(DATABASE_URL)

# 使用 SQLAlchemy 的 declarative_base 创建基本模型
Base = declarative_base()

# 定义模型类,表示数据库中的表
class Item(Base):
    __tablename__ = "items"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    description = Column(String)

# 创建数据库表
Base.metadata.create_all(bind=DATABASE_ENGINE)

# 创建会话工厂
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=DATABASE_ENGINE)

# 依赖项,用于获取数据库会话
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

# 路径操作函数,用于创建新项目
@app.post("/items/")
async def create_item(item: Item, db: Session = Depends(get_db)):
    db.add(item)
    db.commit()
    db.refresh(item)
    return item

# 路径操作函数,用于获取项目列表
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
    items = db.query(Item).offset(skip).limit(limit).all()
    return items

在这个例子中:

  •  使用 SQLAlchemy 定义了一个简单的数据模型 Item,表示数据库中的 items 表。

  •  使用 databases.Database 来处理异步数据库连接,以及 sqlalchemy.create_engine 创建数据库引擎。

  •  使用 SessionLocal 来创建数据库会话。

  •  使用 Depends 作为依赖项,通过 get_db 函数获取数据库会话。

  •  定义了两个路径操作函数,一个用于创建新项目,一个用于获取项目列表。


这只是一个简单的示例,实际中你可能需要更复杂的模型和操作。FastAPI 配合 SQLAlchemy 提供了强大的数据库支持,你可以使用 ORM 来轻松操作数据库。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7396/FastAPI