fastapi项目 02-数据库SqlAlchemy
1. fastapi连接数据库
在app目录下,新建database.py文件,在这里实现数据的连接。
# app/database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import declarative_base
# 为 SQLAlchemy 定义数据库 URL地址
SQLALCHEMY_DATABASE_URL = 'mysql+pymysql://root:12345678@127.0.0.1:3306/fastapi_v1'
# 创建 SQLAlchemy 引擎
engine = create_engine(SQLALCHEMY_DATABASE_URL)
# 创建一个SessionLocal 数据库会话
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建一个Model类
DbModel = declarative_base()
1.1 创建数据库模型
在app文件下,新建model/models.py文件创建数据库模型。并且将使用我们之前创建的DbModel类来创建SQLAlchemy模型。
from apps.database import DbModel
from sqlalchemy import Column, String, Boolean, Integer
class User(DbModel):
__tablename__ = 'user' # 数据库表名
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), unique=True, nullable=False) # nullable=fasle:必填
password = Column(String(256), nullable=False)
is_active = Column(Boolean, default=1)
email = Column(String(64), nullable=True)
adress = Column(String(64), nullable=True)
2. SqlAlchemy表迁移-alembic
首先需要安装alembic:> pip install alembic
,如果报超时,则需添加如下:-i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
安装完了之后,需要生成初始化文件,想项目根目录下执行:alembic init alembic
,可以看到目录下新增alembic的文件和一个alembic.ini文件。
alembic/
|____version/ // 一个空的文件夹,保存迁移中间文件
|____env.py // 迁移配置文件 (主要设置文件)
|____script.py.mako
|____READEME // 配置文件
alembic.ini // alembic 自动生成的迁移配置文件
app/ // 项目文件夹
2.1 修改alembic配置文件(alembic.ini)
找到sqlalchemy.url改成自己的配置,在该文件下的第63行。
;sqlalchemy.url = driver://user:pass@localhost/dbname. # 改成下面的,自己的数据库配置信息
sqlalchemy.url = mysql+pymysql://root:12345678@127.0.0.1:3306/fastapi_v1
2.2 # 配置alembic/env.py
文件
在该文件夹的19,20,21行,替换如下代码,自己的数据库DbModel
# target_metadata = None 找到这,并替换以下内容
from app.models import DbModel #
target_metadata = DbModel.metadata
执行迁移命令:
alembic revision --autogenerate -m "test" # 自定义迁移文件名
alembic upgrade head
就可以在mysql客户端中,查看到创建的表已经添加到数据库中了。
如果能在接口中,讲数据添加到数据库中,还需要在app下新建数据库session会话,我们写在dependency.py下。
# app/dependency
from apps.database import SessionLocal
# Dependency
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
在view函数中,添加如下注册接口。
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy.orm import Session
from apps.dependency import get_db
from apps.model.models import User
router = APIRouter()
class UserInfo(BaseModel):
username: str
password: str
@router.post("/login")
async def login_demo():
return {"msg": "login success!"}
@router.post("/register")
async def register_demo(body: UserInfo, db: Session = Depends(get_db)):
# db的实例
print(f"请求body:{body}")
user = User(**body.dict())
db.add(user)
db.commit()
db.refresh(user)
return {"msg": "register success!"}
运行mian.py函数。执行注册接口,新增数据到数据库成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!