首页 > 数据库 >FastApi-1-结合sql 增/查demo

FastApi-1-结合sql 增/查demo

时间:2023-08-20 16:58:42浏览次数:36  
标签:status get demo db pydantic user sql FastApi fastapi

目录

FastAPI学习记录

fastapi已经学习有一段时间,今天抽时间简单整理下。

官网介绍:
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

  • 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)最快的 Python web 框架之一。

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。* 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI
    (以前被称为Swagger) 和 JSON Schema。

如果还没学过的同学可先了解,如 pydantic、fastapi、sqlalchemy、请求/响应模型等有一定认识。
以下分享本次所学习的资料:

本次学习视频(推荐):https://www.imooc.com/video/22971
fastapi:https://fastapi.tiangolo.com/zh
pydantic 官方文档:https://docs.pydantic.dev
pydantic 支持所有的类型:https://docs.pydantic.dev/usage/types

项目结构

fastapi基本大同小异
在这里插入图片描述
如果是多个应用则可以再往上提一层,如 admin 下的,app下的等等

部分接口/代码展示

仅仅刚开始学习,增删查改目前只涉及,增、查,未有删改相信也是会很快上手的。
个人感觉主要是 pydantic schemas 这块要梳理清楚,增删查改该怎样编排,使得在编码时更方便。
全部代码将放在最后!
接口文档打开链接:http://127.0.0.1:8000/docs/ppl/index
在这里插入图片描述

from fastapi import APIRouter, Depends, status
from sqlalchemy.orm import Session
from fastapi.responses import JSONResponse
from models.database import Base, engine, get_db
from schemas import schema_user
from cruds import crud_user

api_user = APIRouter()
Base.metadata.create_all(bind=engine)


@api_user.post('/add', response_model=schema_user.GetUser)
def add_user(user: schema_user.CreateUser, work: schema_user.CreateWork, db: Session = Depends(get_db)):
    if crud_user.get_user(db, phone=user.phone):
        return JSONResponse(status_code=status.HTTP_400_BAD_REQUEST, content={
            'code': 0,
            'message': '该手机号已被注册'
        })
    return crud_user.add_user(db, user, work)


@api_user.get('/get', response_model=schema_user.GetUser)
def get_user(id: int = None, phone: int = None, db: Session = Depends(get_db)):
    user = crud_user.get_user(db, id, phone)
    if not user: return JSONResponse(status_code=status.HTTP_200_OK, content={})
    return user


@api_user.get('/list', response_model=list[schema_user.GetUser])
def list_user(skip: int = 1, limit: int = 10, db: Session = Depends(get_db)):
    user_list = crud_user.get_user(db, skip=skip, limit=limit)
    if not user_list: return JSONResponse(status_code=status.HTTP_200_OK, content=[])
    return user_list

感受

值得学习,pydantic 真不错,但是类似编排是比较麻烦了点,可能是本人代码量还不够、不熟练等因素,不过也准备能开始无脑增删查改!!!还需要学习jwt鉴权、中间件、redis,异步后台任务、日志记录等等。
docs接口文档真不赖,生成可视化文档、标注等,直接能调试...方便!

全部代码

右键点我(gitee)

标签:status,get,demo,db,pydantic,user,sql,FastApi,fastapi
From: https://www.cnblogs.com/gsxl/p/17644231.html

相关文章

  • MyBatis中动态SQL判断等值的方式
    一般情况下在使用mybatis的动态SQL时,常用的是用来判空,如下:<iftest="userType!=nullanduserType!=''"><![CDATA[anduser_type=#{userType}]]></if>有时会遇到判断条件是某一个值的时候执行特殊的sql条件或语句,如下:1.数值型示例如下:<iftest="us......
  • mysql 根据字段值显示不同内容,case when的使用
    在表中的数据很多类型或状态保存的内容往往是1,2,3等字符或数字来代表不同的含义.有时候使用sql查询不希望输出的是数字而是对应的字符串,这时就可以使用casewhen来进行多条件显示具体如下:SELECTid,code,CASEWHENtype='1'THEN'小'WHENtype='2'THEN'中'ELSE'大'E......
  • sqlite 实现分页排序
    版本号MacOSAppleM1|Jdk17|Maven3.8.5|SpringBoot2.6.9|内嵌式Sqlite3.42.0.0Pageable使用方式findAll()importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageRequest;importorg.springframework.data.domain.Pageabl......
  • Springboot 内嵌 Sqlite 配置使用
    版本号MacOSAppleM1|Jdk17|Maven3.8.5|SpringBoot2.6.9|Sqlite3.42.0.0pom.xml<dependencies><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId>......
  • MySQL中查询和事务的大小
    有时候了解事务的大小非常重要,尤其是当计划迁移到HA环境,为了保证集群的最佳性能,事务的大小是有限制的。这里来尝试分析一下了解事务大小的不同方法。首先要将事务分成两种类型:1.生成数据的事务(写操作,比如insert、delete、update等DML操作)2.只读的事务(查询操作)在HA环境,第一......
  • SQL
    1.SQL(结构化查询语言)DDL:数据定义语言DML:数据操作语言DCL:数据控制语言DQL:数据查询语言 2.DBMS(数据库管理系统)RDBMS:关系型数据库管理系统二元关系模型(表格形式)Oracle、MYSQL、SQLserver、db2NoSQL:非关系型数据库管理系统弥补关系型数据库系统的不足 3.MYSQL关系型......
  • MySql Workbench 迁移工具 migration 提示缺少pyodbc 2.1.8 的解决方法
    想把公司的数据库转到MySQL,所以想装个MySQL测试,发现新版的MySQL(8.0.34)默认安装还是有不少问题,##一、譬如表、字段大小写的问题:lower_case_table_names=0--表名存储为给定的大小和比较是区分大小写的(linux默认)lower_case_table_names=1--表名存储在磁......
  • SQL Server游标
    文章来源:SQLServer游标-张龙豪-博客园(cnblogs.com) --5.利用游标更新删除数据---游标更新删除当前数据---1.声明游标declareorderNum_03_cursorcursorscrollforselectOrderId,userIdfrombigorderwhereorderNum='ZEORD003402'--2.打开游标openorder......
  • 为什么NoSQL不支持事务
    为什么NoSQL不支持事务1.背景看书《Neo4j权威指南》的时候,发现个问题:日常的NoSQL都不支持事务(ACID)。2.问题事务对数据的存储过程是有利的,既然事情是有利的,理论上存储型数据库都应该支持事务。但事实上是只有很少的一部分数据库支持事务,比如MySQL,Neo4j,并且MySQL也只有部分存......
  • rhel 6.5搭建MySQL 5.5.18一主一从高可用架构
    文档课题:rhel6.5搭建MySQL5.5.18一主一从高可用架构.系统:rhel6.564位数据库:MySQL5.5.18数据库安装包:mysql-5.5.18.tar.gzXtrabackup安装包:percona-xtrabackup-24-2.4.6-2.el6.x86_64.rpm架构信息如下:1、主从搭建1.1、前期准备安装两台MySQL数据库主机后,配置好主机IP地......