📅  最后修改于: 2023-12-03 15:00:23.392000             🧑  作者: Mango
在 Python Web 开发中,使用 ORM(对象-关系映射)技术来访问数据库是非常常见的。而 declarative_base
是 SQLAlchemy 中一个非常强大和方便的类,可以帮助开发者定义和管理 ORM 对象的结构和行为。
同时,fastapi
是一个基于 Python
的现代 Web 框架。它结合了高性能、易用性、自动文档化等优点,是一个非常值得尝试的框架。
本文将介绍如何使用 declarative_base
和 fastapi
来构建一个简单的 Web 应用程序。
如果你还没有安装 fastapi
和 SQLAlchemy
,请先使用 pip
安装:
pip install fastapi sqlalchemy
首先,我们需要创建一个 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
表。这个表有 id
、name
、email
、password_hash
四个字段,分别对应整数类型的主键、字符串类型的用户名、邮箱和密码哈希值。
接下来,我们需要使用 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_base
和 fastapi
,我们可以轻松地定义和管理 ORM 对象,同时构建出非常简单的 Web 应用程序。这是一个非常强大的组合,建议大家在开发 Web 项目时亲自尝试。