fastapi python_fastapi安装及访问页面
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安装及访问页面相关推荐
- Apache 创建虚拟主机目录和设置默认访问页面
Apache 创建虚拟主机目录和设置默认访问页面 虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站 ...
- 【油猴脚本】忽视页面跳转拦截,自动继续访问页面JustJumpAhead(location;正则)
自动继续访问页面JustJumpAhead 发布:2021年9月29日23:15:50 脚本安装地址 参考:greasyfork:JustJumpAhead [更新:2022年10月17日00:19: ...
- 谷歌page speed 安装使用及页面问题详解
原文地址:http://wenku.baidu.com/view/b0a61f3ebcd126fff7050b40.html 谷歌page speed 安装使用及页面问题详解 谷歌page speed ...
- Vue安装axios后页面空白问题
问题 在使用npm install axios安装了axios,并在main.js中配置完成之后,启动Vue项目,访问页面为空白,查看页面元素,控制台报红TypeError: setting ge ...
- elasticsearch基础6——head插件安装和web页面查询操作使用、ik分词器
文章目录 一.基本了解 1.1 插件分类 1.2 插件管理命令 二.分析插件 2.1 es中的分析插件 2.1.1 官方核心分析插件 2.1.2 社区提供分析插件 2.2 API扩展插件 三.Head ...
- 基于Python, Selenium, Phantomjs无头浏览器访问页面
引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...
- java cpu过高排查_CPU使用率过高,访问页面的速度越来越慢?今天我教你解决
tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是因为部署的web程序的问题. 一.现象描述 在一次线上环境,前台访问页面的速度越来越慢,从浏览器F12中看到发出的请求都是 ...
- linux访问网页元素,Linux_DOM和JAVASCRIPT访问页面上的元素,访问方法:getElementById() - phpStudy...
DOM和JAVASCRIPT访问页面上的元素 访问方法: getElementById():返回拥用传递给该方法的指定id的第一个对象的引用. getElementsByName():返回拥用传递该方 ...
- maven WEB项目启动没问题访问页面就报错:org.apache.jasper.JasperException: Unable to compile class for JSP
idea 通过maven插件创建一个WEB项目通过内嵌Tomcat加载项目,启动没问题,一访问页面就报错提示无法将jsp编译为class文件: HTTP Status 500 - type Excep ...
最新文章
- 系统目录结构文件类型及ls.alias命令
- C 语言编程 — 头文件
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 BroadcastReceiver 组件中调用 getApplication() 获取的 Application )
- c打印char* 数据_JAVA基础篇(数据类型)
- android 浅复制与深复制
- 在linux上实现DllMain + 共享库创建方法
- 【转载】Linux中断处理学习笔记
- 瑶光TechTalk | 迈向多维智慧,智能画像与预测算法剖析
- pageable设置size_总结SpringBoot使用Pageable实现分页源码
- 如何优化android内存,Android内存优化
- mysql连接量设置_mysql连接数设置操作方法(Too many connections)
- sql字段合并mysql_sql合并字段
- deeplin显示安装空间不够_太实用了!这种冷门的显示器支架可帮了大忙了
- 紫色范冰冰WIN7主题包
- 网络聊天室Java群聊私聊_Java Spring + Spring MVC + Mybatis WebSocket实现网络聊天室(群聊+私聊)...
- STM32开源开发环境的搭建
- Python:好租网商务楼数据爬取
- Xiaojie雷达之路---TI实战笔记---BPM MIMO
- 11 岁编程,21 岁开发 Linux 系统,这就是顶尖程序员的样子!
- 四种第三方登录的方法
热门文章
- 判断tvs能抗住多少千伏浪涌的依据_TVS管主要参数说明及作用
- axios+Vant+vue+jq重构jq月经周期计算器源代码(兼容移动端)
- L016-老男孩Linux高端运维课程-linux系统文件权限体系实战深入讲解
- #这是我见识过最神奇的代码,程序员:我就是这么任性这么皮!
- element UI 表格实现 表尾合计行 ——小肉包
- COJ1978-LXX的图论题
- D1net阅闻:甲骨文考虑收购市值775亿美元的埃森哲
- 零基础语法入门第十二/十三讲指示代词和不定代词以及形容词
- 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试
- 用mysqlbinlog命令查看二进制日志文件提示: -bash:mysqlbinlog:command not found