推荐答案
// www.javascriptcn.com code example
from fastapi import FastAPI, Depends
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Session
DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
Base.metadata.create_all(bind=engine)
app = FastAPI()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/users/")
def create_user(name: str, db: Session = Depends(get_db)):
db_user = User(name=name)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
@app.get("/users/{user_id}")
def read_user(user_id: int, db: Session = Depends(get_db)):
user = db.query(User).filter(User.id == user_id).first()
return user
# 测试代码
from fastapi.testclient import TestClient
client = TestClient(app)
def test_create_user():
response = client.post("/users/", json={"name": "John Doe"})
assert response.status_code == 200
data = response.json()
assert data["name"] == "John Doe"
assert "id" in data
def test_read_user():
response = client.post("/users/", json={"name": "Jane Doe"})
assert response.status_code == 200
user_id = response.json()["id"]
response = client.get(f"/users/{user_id}")
assert response.status_code == 200
data = response.json()
assert data["name"] == "Jane Doe"
assert data["id"] == user_id本题详细解读
1. 数据库操作的基本设置
在 FastAPI 中,数据库操作通常通过 SQLAlchemy 来实现。首先,我们需要定义一个数据库模型(如 User 类),并通过 Base.metadata.create_all(bind=engine) 创建数据库表。
2. 依赖注入
FastAPI 使用依赖注入来管理数据库会话。get_db 函数是一个依赖项,它会在每个请求开始时创建一个新的数据库会话,并在请求结束时关闭它。
3. 创建和读取用户
在 create_user 和 read_user 路由中,我们通过依赖注入获取数据库会话,并执行相应的数据库操作。
4. 测试数据库操作
为了测试这些数据库操作,我们可以使用 TestClient 来模拟 HTTP 请求。test_create_user 和 test_read_user 是两个测试函数,分别测试了创建用户和读取用户的功能。
test_create_user:发送一个 POST 请求来创建一个新用户,并验证返回的数据是否正确。test_read_user:首先创建一个用户,然后通过 GET 请求读取该用户的信息,并验证返回的数据是否正确。
通过这些测试,我们可以确保数据库操作在 FastAPI 应用中正常工作。