FastAPI 是一个用于构建 Web 应用程序的 Python 框架。它在许多方面都比其他框架快,具有简洁的语法和易于使用的工具。其中包括与数据库交互的工具,即 ORM(对象关系映射)。
ORM 是一种编程模式,它将数据库中的数据转换为 Python 中的对象,并允许开发者使用 Python 代码直接访问数据库,而无需编写 SQL 查询。FastAPI 内置了多个 ORM 工具,例如 SQLAlchemy 和 Tortoise ORM。
SQLAlchemy
SQLAlchemy 是一个广泛使用的 Python ORM 框架,它提供了许多用于管理数据库的工具。它支持多种数据库引擎,并提供灵活的查询语言和完整的事务支持。
使用 SQLAlchemy 连接数据库有几个步骤。首先,需要安装 SQLAlchemy:
代码语言:javascript复制pip install sqlalchemy
然后,需要创建一个数据库引擎,指定要使用的数据库类型、用户名、密码、主机和端口:
代码语言:javascript复制from sqlalchemy import create_engine
SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
在这个示例中,我们使用的是 PostgreSQL 数据库,其中 user
和 password
是要用于连接数据库的用户名和密码,postgresserver
是数据库主机名,db
是要连接的数据库名。
接下来,需要创建一个会话工厂来管理与数据库的交互。会话是一个可以执行多个查询的单个数据库连接。创建会话工厂需要使用 sessionmaker
工具:
from sqlalchemy.orm import sessionmaker
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
现在可以使用 SessionLocal
实例来打开新的数据库会话:
db = SessionLocal()
在 FastAPI 中使用 SQLAlchemy 进行 CRUD 操作与使用原生 SQL 相同。只需要定义数据库模型类,然后使用会话实例进行操作。例如,以下是一个使用 SQLAlchemy 定义用户模型的示例:
代码语言:javascript复制from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True, index=True)
email = Column(String, unique=True, index=True)
password = Column(String)
is_active = Column(Boolean, default=True)
items = relationship("Item", back_populates="owner")
这个模型类定义了一个 User
类,它映射到一个名为 users
的数据库表。表中有几个列,包括 id
、username
、email
、password
和 is_active
。此外,它还定义了一个名为 items
的反向关系,它与 Item
模型类相关联。
使用 db
实例进行 CRUD
操作很简单。例如,以下代码向数据库中插入一个新用户:
代码语言:javascript复制from sqlalchemy.orm import Session
from . import models, schemas
def create_user(db: Session, user: schemas.UserCreate):
hashed_password = get_password_hash(user.password)
db_user = models.User(username=user.username, email=user.email, password=hashed_password)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
这个函数接受一个数据库会话和一个 UserCreate
对象,并将其转换为一个 User
对象。然后,它使用会话实例将该用户添加到数据库中。最后,它将 db_user
对象刷新以获取与数据库中的实际行匹配的所有值,并将其返回。