【FastAPI】Python FastAPI + MySQL 操作流程

本文介绍如何使用Python Web框架FastAPI结合ORM技术实现与MySQL数据库的连接与基本操作,包括数据库连接配置、表结构设计、Pydantic模型定义及CRUD操作等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将使用Python Web框架 FastAPI 实现与关系数据库MySQL的连接与操作。
FastAPI 官方教程

一、连接 MySQL

database.py中,完成与MySQL的连接

 # database.py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


SQLALCHEMY_DATABASE_URL = f'mysql+mysqlconnector://{USER}:{PWD}@localhost:3306/{DB_NAME}?charset=utf8&auth_plugin=mysql_native_password'
engine = create_engine(
    SQLALCHEMY_DATABASE_URL, pool_pre_ping=True
)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

二、设计数据库表

使用ORM在models.py中对数据库表的model进行设计。以user表为例:

 # models.py
 
from sqlalchemy import Column, String

from database import Base, engine


class User(Base):
    __tablename__ = 'user'  # 数据库表名

    account = Column(String(255), primary_key=True, index=True)
    screen_name = Column(String(255), nullable=False)
    hash_pwd = Column(String(255), nullable=False)


if __name__ == '__main__':
    Base.metadata.create_all(engine)

三、(可选)定义与数据库表相对应的 Pydantic models

建立该schema的原因可详见官方教程,大致就是在普通数据与ORM Model中间进行数据的处理与格式化的。

 # schemas.py
 
from pydantic import BaseModel

class User(BaseModel):
    account: str
    screen_name: str
    hash_pwd: str

四、使用DB Session对数据库进行操作

db session 就是对之前定义的 SessionLocal 的实例化。

 # main.py
 
from fastapi import FastAPI, Depends
import hashlib
from sqlalchemy.orm import Session

from database import SessionLocal
import models
import schemas


app = FastAPI()

# Dependency
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


@app.post('/sign_in')
def create_user(user: schemas.User, db: Session = Depends(get_db)):
    db_user = models.User()
    db_user.hash_pwd = hashlib.new('md5', user.pwd.encode()).hexdigest()
    db_user.account, db_user.screen_name = user.account, user.screen_name
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return {
        'error': 0,
        'data': 'success'
    }

五、部署 FastAPI

 # startup.py
 
import uvicorn
from main import app

if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8895)
FastAPI是一个轻量级的Web框架,而Tortoise ORM是一个Python持久化工具,它允许你轻松地与多种数据库系统交互,包括MySQL。连接MySQL并使用Tortoise ORM进行配置通常涉及以下几个步骤: 1. **安装依赖**: 首先,你需要通过`pip`安装FastAPI、Uvicorn作为服务器以及Tortoise ORM和Tortoise-MySQL驱动: ``` pip install fastapi uvicorn tortoise-orm tortoise-sqlite[alembic] ``` 2. **设置环境变量**: 确保你的环境中有一个`DATABASE_URL`,这是Tortoise ORM用于连接数据库的关键。对于MySQL,它通常是这样的格式: ```shell DATABASE_URL=mysql://username:password@localhost/dbname?charset=utf8mb4&autocommit=True ``` 将`username`、`password`替换为你的MySQL用户名和密码,`localhost`替换成实际的主机名,`dbname`替换为你想要连接的数据库名称。 3. **配置文件**: 在`main.py`或项目的配置文件中,添加Tortoise的相关配置: ```python from tortoise import Tortoise # 初始化数据库连接 async def on_startup(): await Tortoise.init( db_url=DATABASE_URL, modules={'models': ['your_app_name.models']} ) # 在启动FastAPI应用时执行初始化 app = FastAPI() app.add_event_handler('startup', on_startup) ``` 这里`your_app_name.models`是指存放模型定义的模块路径。 4. **定义模型**: 在`models.py`文件中,创建对应的数据库实体(表结构): ```python from tortoise import fields, models class YourModel(models.Model): field1 = fields.CharField(max_length=100) field2 = fields.IntField() ``` 5. **迁移数据库**: 如果数据库不存在或者表结构需要更新,你可以使用Alembic(如果已安装)进行数据迁移: ``` alembic upgrade head ``` 6. **使用ORM**: 在FastAPI路由中,你可以像操作常规Python对象一样操作数据库记录: ```python @app.get("/items/{item_id}") async def read_item(item_id: int): your_model = await YourModel.objects.get(id=item_id) return your_model ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值