9.5 数据库会话依赖注入模式
FastAPI入门教程:Python Web开发快速上手,包含数据库会话依赖注入
这是一份面向Python初学者的FastAPI入门教程,从基础概念到实践操作,详细讲解如何使用FastAPI构建Web应用,并涵盖数据库会话依赖注入模式,通过生活化类比和简单示例帮助新手快速建立信心。
FastAPI入门教程:Python Web开发从零开始
介绍FastAPI:为什么它适合初学者?
FastAPI是一个现代、快速的Python Web框架,就像搭建乐高积木一样简单!它专为快速开发而设计,即使你没有任何Web开发经验,也能轻松上手。想象一下,你想开一家咖啡馆,FastAPI就是那个能帮你快速组装好所有设备(如咖啡机、桌椅)的工具,让你专注于制作美味的咖啡(也就是编写Python代码)。
第一步:安装FastAPI
在开始之前,确保你已安装Python(建议Python 3.7+)。打开终端或命令提示符,运行以下命令来安装FastAPI和它的好搭档Uvicorn(一个快速的服务器):
pip install fastapi uvicorn
安装成功后,你已经迈出了第一步!这就像买好了所有做菜的食材,准备开始烹饪了。
第二步:创建你的第一个FastAPI应用
创建一个新文件,命名为 main.py,并用你喜欢的文本编辑器打开它。输入以下代码:
from fastapi import FastAPI
app = FastAPI() # 创建一个FastAPI应用实例,这就像是你的咖啡馆招牌
@app.get("/") # 定义一个路由,当用户访问根路径(如 http://localhost:8000/)时触发
def read_root():
return {"Hello": "World"} # 返回一个简单的JSON响应,就像向客人说“欢迎光临”
保存文件,然后在终端中运行应用:
uvicorn main:app --reload
打开浏览器,访问 http://localhost:8000/,你会看到 {"Hello": "World"}!恭喜你,你刚刚创建了第一个Web API!这就像是成功煮出第一杯咖啡的激动时刻。
第三步:理解基本概念——路由和请求
在FastAPI中,路由就像咖啡馆的菜单:每个URL路径对应一个功能。例如:
@app.get("/items/{item_id}") # 动态路由,item_id是参数,就像根据客人的点单定制咖啡
def read_item(item_id: int):
return {"item_id": item_id}
访问 http://localhost:8000/items/42,你会看到 {"item_id": 42}。这就是处理请求和响应——简单吧!
第四步:引入依赖注入——让代码更灵活
依赖注入听起来复杂,其实很简单。想象你在咖啡馆点餐:你告诉咖啡师“我要一杯拿铁”,咖啡师依赖咖啡豆、牛奶和杯子来制作。在FastAPI中,依赖注入允许你声明代码需要什么“食材”,框架会自动提供。
首先,安装数据库相关库(我们使用SQLite作为例子,因为它轻量且无需额外设置):
pip install sqlalchemy databases
然后,我们来创建一个简单的数据库会话依赖注入示例。创建一个新文件 database.py:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 创建数据库引擎,连接到一个SQLite数据库文件(就像打开咖啡馆的库存记录本)
DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
# 定义一个简单的数据模型,就像咖啡馆的菜单项
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
description = Column(String, nullable=True)
# 创建数据库表
Base.metadata.create_all(bind=engine)
# 依赖函数:提供一个数据库会话,每次请求时自动创建和关闭,就像每次点餐时临时分配一个服务员
from fastapi import Depends
from sqlalchemy.orm import Session
def get_db():
db = SessionLocal()
try:
yield db # 使用yield确保会话在使用后正确关闭
finally:
db.close()
现在,在 main.py 中更新代码,使用这个依赖注入:
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import get_db, Item
app = FastAPI()
@app.get("/items/")
def read_items(db: Session = Depends(get_db)): # 依赖注入:自动获取数据库会话
items = db.query(Item).all() # 查询所有物品
return items
@app.post("/items/")
def create_item(name: str, db: Session = Depends(get_db)):
new_item = Item(name=name) # 创建新物品
db.add(new_item)
db.commit()
db.refresh(new_item)
return new_item
运行应用后,访问 http://localhost:8000/items/,你会看到一个空列表(因为没有数据)。使用工具如curl或Postman发送POST请求到 http://localhost:8000/items/?name=咖啡,然后再次访问GET路径,你会看到新添加的物品!这就像成功管理咖啡馆库存的成就时刻。
第五步:总结和下一步
你已经学会了FastAPI的基础:安装、创建路由、处理请求,并引入了依赖注入模式来管理数据库会话。数据库会话依赖注入模式就像咖啡馆的自动化系统:你只需要声明需要什么(会话),FastAPI会自动为你准备和清理,让你专注于业务逻辑。
生活化类比回顾:
- FastAPI应用:你的咖啡馆
- 路由:菜单选项
- 依赖注入:咖啡师依赖食材
- 数据库会话:临时服务员,处理点单后离开
继续探索:尝试添加更多功能,如更新、删除物品,或使用更复杂的数据库。FastAPI文档(https://fastapi.tiangolo.com/)是你的好帮手!
记住,实践是最好的老师——多动手,你会越来越有信心!