更改sqlite为mysql

from tortoise import Tortoise
import asyncio
async def init():user = 'root'password = '123456'db_name = 'test'await Tortoise.init(#指定mysql信息db_url=f'mysql://{user}:{password}@127.0.0.1:3306/{db_name}',#指定modelsmodules={'models': ['sanic_bp.models']})#按照模型生成表# await Tortoise.generate_schemas()asyncio.run(init())

在sanic中使用:

from sanic import Sanic
from tortoise import Tortoiseapp = Sanic(__name__)@app.listener('after_server_start')
async def notify_server_started(app, loop):print('sanic sanic服务启动后建立mysql连接')#实例化mysql连接await Tortoise.init(db_url='mysql://root:123456@127.0.0.1:3306/test?maxsize=50&minsize=3',modules={'models': ['sanic_bp.models']})

基础使用

from tortoise.contrib.sanic import register_tortoiseregister_tortoise(app, db_url="sqlite://:memory:", modules={"models": ["models"]}, generate_schemas=True
)

sanic 和 fastapi中使用
tortoise-orm 连接多个库

async def run():await Tortoise.init({    #这里面指定两个不同的数据库,虽然它填写的都是一样的"connections": {"first": {"engine": "tortoise.backends.sqlite","credentials": {"file_path": "example.sqlite3"},},"second": {"engine": "tortoise.backends.sqlite","credentials": {"file_path": "example1.sqlite3"},},},#可以指定多个不同的models, 嗯,它指定的也是一样的"apps": {"tournaments": {"models": ["__main__"], "default_connection": "first"},"events": {"models": ["__main__"], "default_connection": "second"},},})#await Tortoise.generate_schemas()#选取数据库client = Tortoise.get_connection("first")#选取 modelssecond_client = Tortoise.get_connection("second")#然后这下面就可以进行orm操作了

增删改查

from typing import List
from fastapi import APIRouter, HTTPException
from tortoise.contrib.fastapi import HTTPNotFoundErrorfrom schemas.MaintainedData import MaintainedData_Pydantic, MaintainedDataIn_Pydantic
from models.MaintainedData import MaintainedData
from schemas.basic import Response404, Response200data = APIRouter(tags=['数据模块'])@data.get("/", summary="数据列表", response_model=List[MaintainedData_Pydantic])
async def data_list(order:str,limit: int = 10, page: int = 1):#  limit 是显示的条数 ,page是页数skip = (page - 1) * limit# select * from movie limit offset,limit# select * from movie limit 0,10return await MaintainedData_Pydantic.from_queryset(MaintainedData.all().offset(skip).limit(limit))@data.post("/data", summary="新增数据", )
async def add_data(md_data: MaintainedData_Pydantic):movie_obj = await MaintainedData.create(**md_data.dict(exclude_unset=True))# movie_obj = await Movie.create(name="",year="",xx="")return await MaintainedData_Pydantic.from_tortoise_orm(movie_obj)@data.put("/data/{data_id}", summary="编辑数据", responses={404: {"model": HTTPNotFoundError}})
async def update_data(site_id: str, md_data: MaintainedDataIn_Pydantic):updated_count = await MaintainedData.filter(site_id=site_id).update(**md_data.dict(exclude_unset=True))print(updated_count)if not updated_count:return Response404(msg=f"data {site_id} not found")return Response200(data=await MaintainedData_Pydantic.from_queryset_single(MaintainedData.get(site_id=site_id)))@data.get("/data/{data_id}", summary="查找数据", response_model=MaintainedData_Pydantic,responses={404: {"model": HTTPNotFoundError}})
async def get_user(site_id: str):return await MaintainedData_Pydantic.from_queryset_single(MaintainedData.get(site_id=site_id))@data.delete("/data/{data_id}", summary="删除数据", responses={404: {"model": HTTPNotFoundError}})
async def del_movie(site_id: str):deleted_count = await MaintainedData.filter(site_id=site_id).delete()if not deleted_count:raise HTTPException(status_code=404, detail=f"data {site_id} not found")return HTTPException(status_code=200, detail=f"Deleted Movie {site_id}")

models.py

from datetime import datetime
from typing import Optional, Iterablefrom tortoise import fields, models, BaseDBAsyncClientclass MaintainedData(models.Model):"""The User model"""id = fields.SmallIntField(pk=True, index=True, description="ID", )site_id = fields.CharField(max_length=20, unique=True, description="网站ID")site_name = fields.CharField(max_length=128, null=False, description="网站名称")site_type = fields.CharField(max_length=16, null=False, description="网站类型")description = fields.CharField(max_length=255, default="",description="网站备注", )site_path_name = fields.CharField(max_length=128, null=True, description="目录名称")site_path_url = fields.CharField(max_length=128, null=True, description="目录链接")status = fields.CharField(max_length=128, null=True, description="脚本状态")run_computer = fields.CharField(max_length=255, null=True, description="运行电脑")run_directory = fields.CharField(max_length=255, null=True, description="运行目录")crawling_time :Optional[datetime]= fields.DatetimeField(auto_add=True, description="运行时间")err_message = fields.CharField(max_length=255, null=True, description="错误信息")

order by

db_Secc = MaintainedData.all().order_by("crawling_time")

Eum 枚举

class order_byEnum(str, Enum):pear = ""banana = '-'@data.get("/", summary="数据列表", response_model=List[MaintainedData_Pydantic])
async def data_list(order_by: order_byEnum = "", limit: int = 10, page: int = 1):#  limit 是显示的条数 ,page是页数skip = (page - 1) * limitreturn await MaintainedData_Pydantic.from_queryset(MaintainedData.all().offset(skip).limit(limit).order_by(f"{order_by}crawling_time"))

FastAPI + tortoise-orm基础使用相关推荐

  1. 数据库和ORMS:使用Tortoise ORM与数据库通信

    文章目录 1. 安装环境 2. 创建数据库模型 3. 设置 `Tortoise` 引擎 4. create 5. 查询 6. 修改.删除 7. 添加关联 8. 用Aerich建立数据库迁移系统 lea ...

  2. 深入理解Magento – 第四章 – 模型和ORM基础

    深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第四章 – 模型和ORM基础 对于任何一个MVC架构,模型(Model)层的实现都是占据了很大一部分.对于Mage ...

  3. Django框架学习--4--分布式路由ORM基础

    本篇文章要点: 1.如何通过分布式路由方法避免主路由文件的urlpatterns过于臃肿? 2.使用ORM框架代替数据库的操作? 1. Django的分布式路由实现 创建应用 应用在django项目中 ...

  4. fastapi 入门系列

    大纲 1. 概述 1.1 什么是FastAPI 1.1 什么是FastAPI FastAPI是一个现代.快速(高性能)的Web框架,用于构建API.它基于Python 3.7+的类型提示(type h ...

  5. python画圆填色橙色_基于TPC-C基准的Python ORM的性能测试详解

    当开发与数据库需要在一起使用的应用程序时,对象关系映射器(ORM)通常用于Python编程中.Python ORM的示例是SQLAlchemy,Peewee,Pony-ORM和Django.选择ORM ...

  6. FastAPI + Vue 前后端分离 接口自动化测试工具 apiAutoTestWeb

    apiAutoTestWeb使用说明 apiAutoTestWeb 是为apiAutoTest的可视化版本,其采用前后端分离( FastAPI + Vue2 )方式实现 具体使用: Python3 + ...

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

    #渲染模板 from fastapi import FastAPI,Request from fastapi.responses import JSONResponse,HTMLResponse,Fi ...

  8. mysql orm .net,2020年 .NET ORM 完整比较、助力选择

    原标题:2020年 .NET ORM 完整比较.助力选择 转自:nicye cnblogs.com/kellynic/p/13664720.html 一.前言 为什么要写这篇文章? 希望针对 SEO ...

  9. Python系列之Django(ORM)

    ORM 基础操作 链接mysql数据库 在setting.py中修改数据库配置文件,本教程咱们以MySQL为例 'default': {'ENGINE': 'django.db.backends.my ...

  10. Django(22)-ORM中F对象和Q对象

    Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...

最新文章

  1. linux获取目标主机shell,expect案例-批量获取主机并分发密钥
  2. c++预处理命令#pragma 用法
  3. curl   liinux下http命令执行工具
  4. JDK8新特性之Lambda表达式
  5. 服务器 raid 1t硬盘吗,用了4块1T的硬盘,做了raid5,显示有2.7T,但是分区做完系统后,有700多G不能动...
  6. 安装 Tensorflow
  7. SLAM Cartographer(13)基于Ceres库的扫描匹配器
  8. mysql的load data,高速将文本文件,插入数据库中
  9. PTA—念数字(C语言)两种方法
  10. linux闹钟命令,Linux基础命令一
  11. tinyxml初体验
  12. jcr多久更新一次_2020年期刊影响因子正式发布,几家欢喜几家愁?!
  13. Python使用打码平台进行识别验证码
  14. 第三方短信验证码服务
  15. html表单 新页面打开新页面,js提交表单并打开新页面的方法
  16. 通过资源监视器排查网络高占用异常
  17. 游戏外挂篇:如何Dump内存获得游戏的辅助
  18. 计算机专业大学生怎么学习?
  19. 什么是ubuntu ?
  20. 使用QQ互联完成网站的QQ第三方登录(详解+坑)

热门文章

  1. php 正方,用php的CURL模拟登录正方教务系统
  2. Java黑皮书课后题第2章:2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它的面积
  3. 浮沙筑塔——protues仿真C51程序之LED灯闪烁
  4. 使用opencv的viz模块显示3d点云
  5. 如何去除软件内嵌广告_iphone如何一键去除app内置小广告?
  6. 人工智能之人工神经网络
  7. 电脑窗口全半屏切换快捷键
  8. 学习Emacs系列教程
  9. Go-Proxy-Checker,一款基于Go编写的高性能代理服务器验证工具
  10. HDFS加密存储(Ranger集成KMS方式)