29 使用数据库之基本CRUD操作

在上一篇中,我们探讨了如何使用 SQLAlchemy 连接数据库。在本节中,我们将继续扩展我们的 FastAPI 应用程序,实施基本的 CRUD(创建、读取、更新、删除)操作。这些操作可以帮助我们有效地管理数据库中的数据。在接下来的内容中,我们将通过案例演示如何实现这些操作。

准备工作

在开始之前,请确保你已经安装了所需的依赖包。你可以使用以下命令安装 FastAPISQLAlchemy

1
pip install fastapi[all] sqlalchemy databases

我们还需要配置数据库连接。以下示例将使用 SQLite 数据库。

1
2
3
4
5
6
7
8
9
10
# database.py
from sqlalchemy import create_engine, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

创建模型

接下来,我们需要定义用于 CRUD 操作的数据库模型。例如,假设我们正在管理一个 用户 数据库表。

1
2
3
4
5
6
7
8
9
10
11
12
13
# models.py
from sqlalchemy import Column, Integer, String
from database import Base

class User(Base):
__tablename__ = "users"

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

def __repr__(self):
return f"<User(name={self.name}, email={self.email})>"

现在我们已经定义了 User 模型,接下来将创建 CRUD 操作。

CRUD 操作实现

CRUD 操作通常会集中在一个服务模块中。我们可以创建一个名为 crud.py 的文件来实现这些功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# crud.py
from sqlalchemy.orm import Session
from models import User

# 创建用户
def create_user(db: Session, name: str, email: str):
db_user = User(name=name, email=email)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user

# 获取用户
def get_user(db: Session, user_id: int):
return db.query(User).filter(User.id == user_id).first()

# 获取所有用户
def get_users(db: Session, skip: int = 0, limit: int = 10):
return db.query(User).offset(skip).limit(limit).all()

# 更新用户
def update_user(db: Session, user_id: int, name: str, email: str):
user = db.query(User).filter(User.id == user_id).first()
if user:
user.name = name
user.email = email
db.commit()
db.refresh(user)
return user

# 删除用户
def delete_user(db: Session, user_id: int):
user = db.query(User).filter(User.id == user_id).first()
if user:
db.delete(user)
db.commit()
return user

主应用程序

现在,让我们将这些操作与 FastAPI 结合。在 main.py 文件中,我们将定义相应的 API 端点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# main.py
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from database import SessionLocal, engine, Base
import crud
from models import User

# 创建所有表
Base.metadata.create_all(bind=engine)

app = FastAPI()

# 依赖项:获取数据库会话
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()

@app.post("/users/", response_model=User)
def create_user(name: str, email: str, db: Session = Depends(get_db)):
return crud.create_user(db=db, name=name, email=email)

@app.get("/users/{user_id}", response_model=User)
def read_user(user_id: int, db: Session = Depends(get_db)):
db_user = crud.get_user(db=db, user_id=user_id)
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
return db_user

@app.get("/users/", response_model=list[User])
def read_users(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
return crud.get_users(db=db, skip=skip, limit=limit)

@app.put("/users/{user_id}", response_model=User)
def update_user(user_id: int, name: str, email: str, db: Session = Depends(get_db)):
user = crud.update_user(db=db, user_id=user_id, name=name, email=email)
if user is None:
raise HTTPException(status_code=404, detail="User not found")
return user

@app.delete("/users/{user_id}", response_model=User)
def delete_user(user_id: int, db: Session = Depends(get_db)):
user = crud.delete_user(db=db, user_id=user_id)
if user is None:
raise HTTPException(status_code=404, detail="User not found")
return user

总结

在本篇文章中,我们实现了基本的 CRUD 操作来管理用户数据。我们定义了数据库模型、CRUD 操作以及如何使用 FastAPI 在 API 端点中调用这些操作。这样,你就能够通过 HTTP 请求进行数据的创建、读取、更新和删除。

下一篇将讨论如何实现 异步数据库操作,以提高应用的性能。请继续关注。

29 使用数据库之基本CRUD操作

https://zglg.work/python-fastapi-zero/29/

作者

IT教程网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论