1.fastapi安装及访问页面

环境

Python3.8

pip3 install fastapi

pip3 install uvicorn

pip3 install -i https://pypi.douban.com/simple 更换阿里源

安装python3.8后使用pip命令安装 fastapi 第三方模块以及 uvicorn 模块

导入 fastapi

from fastapi import FastAPI

app = FastAPI()

@app.get("/")

async def root():

return {"message": "Hello World"}

写入到名为web.py中在终端使用命令启动web

uvicorn web:app --reload

uvicorn main:app --host ‘192.168.93.131’ --port 8080 --reload Linux上这样启动不然会冲突

访问:loaclhost:8000

页面展示Hello World信息

web访问完成

2.与mysq数据库连接

安装 sqlalchemy 模块

建造User的映射

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base): #构造映射字段

__tablename__ = 'tbluser' #对应mysql的tbluser表

userid = Column(Integer,primary_key=True) #表中字段userid

username = Column(String(255))#表中username字段

def __init__(self,userid,username): #构造函数

self.userid = userid

self.username = username

def __str__(self): #打印形式

return "id:%s,名称:%s" % (str(self.userid) ,self.username)

链接mysql用pymysql方式连接

安装pymysql

pip install pymysql

from sqlalchemy import Column, String, create_engine, Integer

#数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名

engine =create_engine("mysql+pymysql://root:123456@localhost:3306/fastapi",encoding='utf-8')

# 把当前的引擎绑定给这个会话

Session = sessionmaker(bind=engine)

# 实例化

session = Session()

查询user

#查询

@app.get("/user/{user_id}")

async def queryUserByUserId(user_id):

# 创建Query查询,filter是where条件,调用one返回唯一行,调用all则是返回所有行

try:

user1 = session.query(User).filter(User.userid==user_id).one()

if user1 ==None:

return "查询无结果"

# user2 = session.query(User).filter(User.userid == '2').one()

# vars1 = {"第一位":user1,"第二位":user2}

# userList = session.query(User).all()

# for user in userList:

# print(user)

# user = engine.connect().execute("select * from tbluser where userid = 1;")

# user = session.execute("select * from user where id = 1;")

session.close()

except ArithmeticError:

print("Error: 查询失败")

return user1

增加单个User CreatUser是用来存储前端穿过来的对象,无法用User这个对象,后续添加的话需要将CreatUser里面值重新赋值给User对象,进行添加

class CreatUser(BaseModel):

userid : int

username : str

def __str__(self):

return "id:%s,名称:%s" % (str(self.userid) ,self.username)

# 增加一个

@app.post("/user/addUser")

async def InserUser(user: CreatUser):

try:

dataUser = User(userid=user.userid,username=user.username)#将CreatUser接收到的值宠幸赋值给User

session.add(dataUser)

session.commit()#每次添加都要commit提交

session.close()#关闭

except ArithmeticError:

print("Error: 添加失败")

return "添加成功"

from typing import List #导入typing模块 的List

# 增加多个

@app.post("/user/addUserList")

async def addUserList(*,user: List[CreatUser]): # 接受List列表 前提需要导入List

try:

for u in user:

dataUser = User(userid=u.userid, username=u.username)

session.add(dataUser) #我觉得这里这样处理应该太消耗资源了,等待更新

session.commit()

session.close()

except ArithmeticError:

print("Error: 添加失败")

return "添加成功"

修改

#修改

@app.put("/user/updateUser")

async def updateUser(user_id: int ,updateUser:schema.CreatUser):

try:

queryUser = session.query(models.User).filter(models.User.userid==user_id).one()

update_dict = updateUser.dict(exclude_unset=True) #变成字典,修改所有

for k, v in update_dict.items():

setattr(queryUser, k, v)

session.commit()

session.refresh(queryUser)

session.close()

except ArithmeticError:

print("Error: 修改失败")

return queryUser

删除:逻辑删除

#删除

@app.delete("/user/deleteUser")

async def deleteUser(user_id,deleteUser: schema.CreatUser):

queryUser = session.query(models.User).filter(models.User.userid == user_id).one()

setattr(queryUser, "isDelete", 0) #修改isDelete的值为0

session.commit()

session.close()

return {'Result': '删除成功'}

总结:

class User(Base): #这里Base用来从数据库获取User对象进行字段映射展示的

class CreatUser(BaseModel): #接受前台传入的对象,需要把值重新给User保存到数据库

每次查询操作都需要关闭session

提交修改操作需要commit,close

fastapi python_fastapi安装及访问页面相关推荐

  1. Apache 创建虚拟主机目录和设置默认访问页面

    Apache 创建虚拟主机目录和设置默认访问页面 虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站 ...

  2. 【油猴脚本】忽视页面跳转拦截,自动继续访问页面JustJumpAhead(location;正则)

    自动继续访问页面JustJumpAhead 发布:2021年9月29日23:15:50 脚本安装地址 参考:greasyfork:JustJumpAhead [更新:2022年10月17日00:19: ...

  3. 谷歌page speed 安装使用及页面问题详解

    原文地址:http://wenku.baidu.com/view/b0a61f3ebcd126fff7050b40.html 谷歌page speed 安装使用及页面问题详解 谷歌page speed ...

  4. Vue安装axios后页面空白问题

    问题   在使用npm install axios安装了axios,并在main.js中配置完成之后,启动Vue项目,访问页面为空白,查看页面元素,控制台报红TypeError: setting ge ...

  5. elasticsearch基础6——head插件安装和web页面查询操作使用、ik分词器

    文章目录 一.基本了解 1.1 插件分类 1.2 插件管理命令 二.分析插件 2.1 es中的分析插件 2.1.1 官方核心分析插件 2.1.2 社区提供分析插件 2.2 API扩展插件 三.Head ...

  6. 基于Python, Selenium, Phantomjs无头浏览器访问页面

    引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...

  7. java cpu过高排查_CPU使用率过高,访问页面的速度越来越慢?今天我教你解决

    tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是因为部署的web程序的问题. 一.现象描述 在一次线上环境,前台访问页面的速度越来越慢,从浏览器F12中看到发出的请求都是 ...

  8. linux访问网页元素,Linux_DOM和JAVASCRIPT访问页面上的元素,访问方法:getElementById() - phpStudy...

    DOM和JAVASCRIPT访问页面上的元素 访问方法: getElementById():返回拥用传递给该方法的指定id的第一个对象的引用. getElementsByName():返回拥用传递该方 ...

  9. maven WEB项目启动没问题访问页面就报错:org.apache.jasper.JasperException: Unable to compile class for JSP

    idea 通过maven插件创建一个WEB项目通过内嵌Tomcat加载项目,启动没问题,一访问页面就报错提示无法将jsp编译为class文件: HTTP Status 500 - type Excep ...

最新文章

  1. 系统目录结构文件类型及ls.alias命令
  2. C 语言编程 — 头文件
  3. 【Android 安全】DEX 加密 ( Application 替换 | 分析 BroadcastReceiver 组件中调用 getApplication() 获取的 Application )
  4. c打印char* 数据_JAVA基础篇(数据类型)
  5. android 浅复制与深复制
  6. 在linux上实现DllMain + 共享库创建方法
  7. 【转载】Linux中断处理学习笔记
  8. 瑶光TechTalk | 迈向多维智慧,智能画像与预测算法剖析
  9. pageable设置size_总结SpringBoot使用Pageable实现分页源码
  10. 如何优化android内存,Android内存优化
  11. mysql连接量设置_mysql连接数设置操作方法(Too many connections)
  12. sql字段合并mysql_sql合并字段
  13. deeplin显示安装空间不够_太实用了!这种冷门的显示器支架可帮了大忙了
  14. 紫色范冰冰WIN7主题包
  15. 网络聊天室Java群聊私聊_Java Spring + Spring MVC + Mybatis WebSocket实现网络聊天室(群聊+私聊)...
  16. STM32开源开发环境的搭建
  17. Python:好租网商务楼数据爬取
  18. Xiaojie雷达之路---TI实战笔记---BPM MIMO
  19. 11 岁编程,21 岁开发 Linux 系统,这就是顶尖程序员的样子!
  20. 四种第三方登录的方法

热门文章

  1. 判断tvs能抗住多少千伏浪涌的依据_TVS管主要参数说明及作用
  2. axios+Vant+vue+jq重构jq月经周期计算器源代码(兼容移动端)
  3. L016-老男孩Linux高端运维课程-linux系统文件权限体系实战深入讲解
  4. #这是我见识过最神奇的代码,程序员:我就是这么任性这么皮!
  5. element UI 表格实现 表尾合计行 ——小肉包
  6. COJ1978-LXX的图论题
  7. D1net阅闻:甲骨文考虑收购市值775亿美元的埃森哲
  8. 零基础语法入门第十二/十三讲指示代词和不定代词以及形容词
  9. 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试
  10. 用mysqlbinlog命令查看二进制日志文件提示: -bash:mysqlbinlog:command not found