fastapi项目-深入浅出db使用(一)

一、如何在fastapi项目中使用数据库

fastapi作为一个高性能的web框架,通过SQLAlchemy工具操作db数据库,本文将深入浅出地讲解如何在FastAPI项目中使用数据库会话对象(db),帮助你快速掌握数据库操作的核心技巧。

二、db概念详解

1.什么是db会话对象

在FastAPI项目中,db通常是指数据库会话对象(Session),它是通过SQLAlchemy库来管理的。db会话对象用于执行数据库操作,如查询、插入、更新和删除。它的核心作用是与数据库进行交互,并管理事务的生命周期。

2.如何使用db会话对象

在FastAPI中,通常通过依赖注入的方式获取db会话对象。以下是一个典型的get_session函数示例:
在fastapi项目中db软件包下:

from sqlalchemy.orm import Session
from .database import SessionLocal  # SessionLocal 是数据库会话工厂

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

在路由中使用时,通过Depends注入db会话

from fastapi import Depends

@app.get("/items")
def read_items(db: Session = Depends(get_session)):
    items = db.query(Item).all()  # 使用 db 查询数据
    return items

3.如何通过db操作数据库

3.1 查询数据

使用db.query()方法

  • 查询所有数据
items = db.query(Item).all()  # 获取 Item 表中的所有记录
  • 查询单条数据
item = db.query(Item).filter(Item.id == 1).first()  # 获取 id 为 1 的记录
  • 条件查询
items = db.query(Item).filter(Item.price > 100).all()  # 获取价格大于 100 的所有记录
  • 排序查询
items = db.query(Item).order_by(Item.price.desc()).all()  # 按价格降序排列
  • 分页查询
items = db.query(Item).offset(10).limit(5).all()  # 跳过前 10 条,取接下来的 5 条

3.2 插入数据

使用db.add()和db.commit()方法可以向数据库中插入新记录。

new_item = Item(name="New Item", price=99.99)
db.add(new_item)  # 将新记录添加到会话
db.commit()       # 提交事务,将记录写入数据库
db.refresh(new_item)  # 刷新实例,获取数据库生成的字段(如自增ID)

3.3 更新数据

通过查询获取记录后,可以直接修改记录的属性,然后调用db.commit()提交更改。

item = db.query(Item).filter(Item.id == 1).first()
if item:
    item.price = 199.99  # 修改价格
    db.commit()          # 提交更改
    db.refresh(item)     # 刷新实例

3.4 删除数据

使用db.delete()和db.commit()方法可以从数据库中删除记录。

item = db.query(Item).filter(Item.id == 1).first()
if item:
    db.delete(item)  # 删除记录
    db.commit()      # 提交更改

4.事务管理

数据库会话对象支持事务管理。如果在操作过程中发生错误,可以使用db.rollback()回滚事务。

try:
    new_item = Item(name="New Item", price=99.99)
    db.add(new_item)
    db.commit()
except Exception as e:
    db.rollback()  # 回滚事务
    raise e
finally:
    db.close()  # 关闭会话

5.数据库模型定义

数据库模型是通过SQLAlchemy的Base类定义的。以下是一个简单的模型示例:

from sqlalchemy import Column, Integer, String, Float
from .database import Base

class Item(Base):
    __tablename__ = "items"  # 数据库表名

    id = Column(Integer, primary_key=True, index=True)  # 主键
    name = Column(String, index=True)                   # 名称
    price = Column(Float)                               # 价格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值