FastAPI框架,数据库迁移生成及增删改查

#渲染模板

from fastapi import FastAPI,Request
from fastapi.responses import JSONResponse,HTMLResponse,FileResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()
template = Jinja2Templates("ht")

@app.get("/")
def index(req:Request):
    return template.TemplateResponse("index_html.html",context={"request":req})




#目录结构

FastAPI框架,数据库迁移生成及增删改查_第1张图片

model.py文件

from tortoise import Model,fields

class User(Model):
    """数据库种的表"""
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=20)
    sexx = fields.CharField(max_length=20,default="男")
    c_time = fields.DatetimeField(auto_now_add=True)
    u_time = fields.DatetimeField(auto_now=True)

db.py文件

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from models.model import User
from tortoise.contrib.fastapi import HTTPNotFoundError, register_tortoise

app = FastAPI(title="Tortoise ORM FastAPI example")

register_tortoise(#这里是启动app的,之后会考虑和使用uvicorn启动的性能差别
    app,
    db_url="mysql://root:123@localhost:3306/fastapi_1",#数据库信息
    modules={"models": ["models.model"]},#models列表
    # generate_schemas=True,#如果数据库为空,则自动生成对应表单,生产环境不要开
    add_exception_handlers=True,#生产环境不要开,会泄露调试信息
)

TORTOISE_ORM = {
    "connections": {"default": "mysql://root:123@localhost:3306/fastapi_1"},
    "apps": {
        "models": {
        	# models对应上面创建的models.py
            "models": ["aerich.models", "models.model"],
            "default_connection": "default",
        },
    },
}

index1.py文件

import aerich
from fastapi import FastAPI
from models.model import User
from db import app
from tortoise.contrib.fastapi import register_tortoise


@app.get("/")
async def get_user():
    user_all = await User.all()
    print(user_all)
    return "a"
  • 生成初始化数据配置, db.TORTOISE_ORM是上面配置TORTOISE_ORM的路径
生成初始化数据配置
(1)aerich init -t db.TORTOISE_ORM

初始化数据库   生成后会生成一个pyproject.toml文件和一个migrations文件夹
(2)aerich init-db



修改数据模型后生成迁移文件
(3)aerich migrate
# 在后面加 --name=xxx, 可以指定文件名


#迁移后执行upgrade
(4)aerich upgrade


回退到上一个版本
aerich downgrade




#启动项目命令
uvicorn index1:app --reload 例子:


        我的项目启动命令是
        uvicorn views.index1:app --reload

 #增删改查

import aerich
from fastapi import FastAPI,Form
from models.model import User
from db import app
from tortoise.contrib.fastapi import register_tortoise


#展示全部
@app.get("/")
async def get_user():
    user_all = await User.all()
    print(user_all)
    return "a"

#添加数据命令
@app.api_route("/add_data",methods=['POST'])
async  def add_data(name=Form(None),sexx=Form(None)):
    await User(name=name,sexx=sexx).save()
    return "添加成功"

#单条数据查询
@app.api_route("/one_filter_data",methods=['POST'])
async def like_data_filter(name=Form(None)):
    data = await User.filter(name=name).first()
    print(data)
    return {"data":data}

#带有包含该字段值的数据
@app.post("/filter_all_data")
async def filter_all_data(name=Form(None)):
    #加不加all()没什么区别
    data = await User.filter(name=name).all()
    return {"data":data}

#修改数据
@app.put("/put_filter_data")
async def put_filter_data(name=Form(None),id=Form(None),sexx=Form(None)):
    await User.filter(id=id).update(name=name,sexx=sexx)
    return "修改成功"

#删除数据
@app.delete("/delete_data")
async def del_data(id=Form(None)):
    await User.filter(id=id).delete()
    return "删除成功"



你可能感兴趣的:(数据库,mysql,python,FastApi)