#渲染模板
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})
#目录结构
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"
生成初始化数据配置
(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 "删除成功"