📜  declarative_base fastapi (1)

📅  最后修改于: 2023-12-03 15:00:23.392000             🧑  作者: Mango

使用 declarative_base 和 fastapi

介绍

在 Python Web 开发中,使用 ORM(对象-关系映射)技术来访问数据库是非常常见的。而 declarative_base 是 SQLAlchemy 中一个非常强大和方便的类,可以帮助开发者定义和管理 ORM 对象的结构和行为。

同时,fastapi 是一个基于 Python 的现代 Web 框架。它结合了高性能、易用性、自动文档化等优点,是一个非常值得尝试的框架。

本文将介绍如何使用 declarative_basefastapi 来构建一个简单的 Web 应用程序。

安装

如果你还没有安装 fastapiSQLAlchemy,请先使用 pip 安装:

pip install fastapi sqlalchemy
创建 ORM 对象

首先,我们需要创建一个 ORM 对象,它将被映射到数据库中的表。在 SQLAlchemy 中,这个对象需要继承自 declarative_base()

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

在这个基础上,我们可以定义一个简单的 ORM 对象。

from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(50), index=True)
    email = Column(String(50), unique=True, index=True)
    password_hash = Column(String(128))

这个 ORM 对象定义了一个 User 类,它将被映射为 users 表。这个表有 idnameemailpassword_hash 四个字段,分别对应整数类型的主键、字符串类型的用户名、邮箱和密码哈希值。

创建 FastAPI 应用程序

接下来,我们需要使用 fastapi 来创建一个 Web 应用程序,并处理用户请求。

from fastapi import FastAPI

app = FastAPI()

这个应用程序只有一个 HTTP 动词:GET /users/{user_id}。它将返回指定用户的名称和邮箱。

from fastapi import HTTPException

@app.get("/users/{user_id}")
async def read_user(user_id: int):
    user = session.query(User).filter(User.id == user_id).first()

    if not user:
        raise HTTPException(status_code=404, detail="User not found")

    return {
        "name": user.name,
        "email": user.email,
    }

这个函数使用 SQLAlchemy ORM 查询数据库中的 User 表,并返回指定 ID 的用户。

运行应用程序

最后,我们需要在 Python 中运行这个应用程序。我们可以使用 uvicorn,一个基于 asyncio 驱动的 Web 服务器。

uvicorn main:app --reload

这个命令会在本地启动一个 Web 服务器,可以通过 http://localhost:8000/users/{user_id} 来访问该应用程序的服务。

结论

通过使用 declarative_basefastapi,我们可以轻松地定义和管理 ORM 对象,同时构建出非常简单的 Web 应用程序。这是一个非常强大的组合,建议大家在开发 Web 项目时亲自尝试。