怪奇物语

怪奇物语

首页 新随笔 联系 管理

tortoise-orm在fastapi中的使用


"""
Tortoise ORM 
"""


from tortoise.contrib.fastapi import register_tortoise
from tortoise.contrib.pydantic import pydantic_model_creator
from tortoise import models, fields

class TortoiseOrm(models.Model):
    # 表中的第一个字段,字符串类型,最大长度30个字符
    data = fields.CharField(max_length=30)
    #      第二个字符,datatime类型,自动添加时间戳,不为空
    create_date = fields.DatetimeField(auto_now_add=True, null=True)

    class Meta:
        table = 'a' # 表的名称

# biao 转成pydantic模型 output openapi 模型名称,
# 这个东西相当于一个过滤器,将表中的字段过滤成合适的pydantic模型
Response = pydantic_model_creator(TortoiseOrm, name="OutPut", exclude=("create_date",))



from fastapi import FastAPI
app = FastAPI(title="TortoiseORM")

register_tortoise(
    app,
    db_url="sqlite://basic.sqlite3",
    modules={"models": ["__main__"]},
    add_exception_handlers=True,
)


@app.get("/", response_model=Response)
async def index():
    # 第一种自己手动过滤,更加精确,执行效率会高一些,select id,data from a
    # return await TortoiseOrm.all().order_by("id").first().values('id', 'data')
    # 第二种,直接查询所有的字段,然后通过Response模型过滤,执行效率可能会低一些,但是简单省事select * from a;
    return await TortoiseOrm.all().order_by("id").first()


@app.get("/index")
async def index1():
    return await TortoiseOrm.all().order_by("id")

if __name__ == '__main__':
    import uvicorn

    uvicorn.run("__main__:app", reload=True)
posted on 2023-02-11 06:35  超级无敌美少男战士  阅读(357)  评论(0)    收藏  举报