当前位置:   article > 正文

【FastAPI】Python FastAPI + MySQL 操作流程_python fastapi mysql服务公共启用

python fastapi mysql服务公共启用

本文将使用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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

二、设计数据库表

使用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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

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

 # schemas.py
 
from pydantic import BaseModel

class User(BaseModel):
    account: str
    screen_name: str
    hash_pwd: str
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

四、使用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'
    }
  • 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

五、部署 FastAPI

 # startup.py
 
import uvicorn
from main import app

if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8895)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/204259
推荐阅读
相关标签
  

闽ICP备14008679号