FastAPI系列(20):ORM添加表记录
本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695
请求数据:符合要求
main.py
import uvicorn
from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise
from test_orm.api.student import student_api
from test_orm.settings import TORTOISE_ORM
app = FastAPI()
app.include_router(student_api, prefix="/student", tags=["学生接口"])
# register_tortoise是注册函数,fastapi一旦运行,register_tortoise已经执行,通过传递进去的app对象,监听服务启动和终止事件
register_tortoise(
app=app,
config=TORTOISE_ORM,
)
if __name__ == '__main__':
uvicorn.run('main:app', host='127.0.0.1', port=8001, reload=True, workers=1)
api目录下student.py
from typing import List
from fastapi import APIRouter
from pydantic import BaseModel, field_validator
from test_orm.models import Student
student_api = APIRouter()
class StudentIn(BaseModel):
name: str
pwd: str
sno: int
clas_id: int
courses: List[int] = []
@field_validator("name")
def name_must_alpha(cls, value): # 使用 cls 而不是 self
assert value.isalpha(), 'name must be alpha'
return value
@field_validator("sno")
@classmethod # 必须在下面
def sno_validate(cls, value):
assert 1000 <= value < 10000, '学号要在[1000-10000)的范围内'
return value
@student_api.post("/")
async def addStudent(student_in: StudentIn):
# 方式1
student = Student(name=student_in.name, pwd=student_in.pwd, sno=student_in.sno, clas_id=student_in.clas_id)
await student.save() # 插入到数据库student表;必须要加await
print(student, type(student))
return student
接口文档

请求数据

响应结果


数据库新增id为3的数据

查询添加的数据
下面直接返回,也可以对响应内容做要求
from typing import List
from fastapi import APIRouter
from pydantic import BaseModel, field_validator
from test_orm.models import Student, Course
student_api = APIRouter()
@student_api.get("/{student_id}")
async def getOneStudent(student_id: int):
student = await Student.get(id=student_id)
return student
响应结果

请求数据:不符合要求

响应结果

方法2更简洁,没有save
@student_api.post("/")
async def addStudent(student_in: StudentIn):
# 方式1
# student = Student(name=student_in.name, pwd=student_in.pwd, sno=student_in.sno, clas_id=student_in.clas_id)
# await student.save() # 插入到数据库student表;必须要加await
# 方式2
student = await Student.create(name=student_in.name, pwd=student_in.pwd, sno=student_in.sno,
clas_id=student_in.clas_id)
print(student, type(student))
return student
__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!

浙公网安备 33010602011771号