news 2026/7/12 18:31:20

Python Web个人学习记录04

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python Web个人学习记录04

Python Web Day04

ORM:用于面向对象编程语言和关系型数据库之间建立映射
pip install"sqlalchemy[asyncio]"aiomysql
ORM建表

ORM创建数据库异步引擎

建立数据库

CREATE DATABASE FastAPI_first CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

链接数据库

fromsqlalchemy.ext.asyncioimportcreate_async_engine
#创建异步引擎ASYNC_DATABASE_URL="mysql+aiomysql://root:root@localhost:3307/FastAPI_first?charset=utf8"async_engine=create_async_engine(ASYNC_DATABASE_URL,echo=True,# 输出SQL日志pool_size=10,#设置连接池活跃的连接数max_overflow=10#允许额外的连接数)

ORM定义模型类

基类,继承DeclarativeBase

定义数据库表对应的模型名

classBase(DeclarativeBase):create_time:Mapped[datetime]=mapped_column(DateTime,insert_default=func.now(),default=func.now,comment="创建时间")update_time:Mapped[datetime]=mapped_column(DateTime,insert_default=func.now(),default=func.now,onupdate=func.now,comment="修改时间")classBook(Base):__tablename__="book"id:Mapped[int]=mapped_column(primary_key=True,comment="书籍")bookname:Mapped[str]=mapped_column(String(255),comment="书名")author:Mapped[str]=mapped_column(String(255),comment="作者")price:Mapped[float]=mapped_column(Float,comment="价格")publisher:Mapped[str]=mapped_column(String(255),comment="出版社")

ORM创建数据库表

从连接池获取异步连接,开启事务执行ORM

FastAPI应用启动时,创建数据库表

#建表:定义函数建表 FastAPI启动时调用建表的函数asyncdefcreate_tables():# 获取异步引擎 创建事务asyncwithasync_engine.begin()asconn:awaitconn.run_sync(Base.metadata.create_all)#使用Base模型类源数据@asynccontextmanagerasyncdefapp_lifespan(app:FastAPI):awaitcreate_tables()# 启动时执行yield# 应用运行阶段

必须先定义生命周期函数,再创建app

app=FastAPI(lifespan=app_lifespan)
在路由当中使用ORM

核心:创建依赖项,使用Depends注入到处理函数

# 定义一个查询功能接口AsyncSessionLocal=async_sessionmaker(bind=async_engine,#绑定数据库引擎class_=AsyncSession,#指定会话类expire_on_commit=False#提交后会话不过期,不会重新查询数据库)asyncdefget_datebase():asyncwithAsyncSessionLocal()assession:try:yieldsession#返回数据库会话给路由处理函数awaitsession.commit()#提交事务exceptException:awaitsession.rollback()#有异常raisefinally:awaitsession.close()# 关闭会话@app.get("/book/books")asyncdefget_book_list(db:AsyncSession=Depends(get_datebase)):# 查询result=awaitdb.execute(select(Book))book=result.scalars().all()returnbook
增删改查

查:

result=awaitdb.execute(select(模型类))#返回一个ORM对象

获取所有数据:

result.scalars().all()

获取单条数据

result.scalars().first()get(模型类,主键值)
@app.get("/book/books")asyncdefget_book_list(db:AsyncSession=Depends(get_datebase)):# 查询# result = await db.execute(select(Book))# # book = result.scalars().all()# book = result.scalars().first()book=awaitdb.get(Book,2)returnbook

查询条件:(学过数据库的应该都接触过)

条件
比较判断==;>= ; > ; < ;<=等
模糊查询like() %:零个一个或多个字符 _一个单个字符
与非查询&;|;~
包含查询in_()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 16:00:27

WorkshopDL终极指南:如何免费下载1000+游戏的Steam创意工坊模组

WorkshopDL终极指南&#xff1a;如何免费下载1000游戏的Steam创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为Steam创意工坊的模组下载而烦恼吗&#xff1f;…

作者头像 李华
网站建设 2026/7/11 14:55:14

简述:青蛙腹(长期久坐最典型)

简述&#xff1a;青蛙腹&#xff08;长期久坐最典型)长期久坐最典型就是内脏脂肪堆积 腹横肌松弛 青蛙腹&#xff08;下腹突出&#xff09;&#xff0c;非常贴合你的情况。 下面给你量身定制一套「久坐男士消蛙腹专属方案」&#xff0c;不用高强度&#xff0c;好坚持。 一、先…

作者头像 李华
网站建设 2026/7/11 2:44:10

量子化学计算:从传统方法到量子启发算法

1. 量子化学计算的现状与挑战量子化学计算的核心目标是求解薛定谔方程&#xff0c;以预测分子的电子结构和性质。传统方法如Hartree-Fock&#xff08;HF&#xff09;和耦合簇&#xff08;CC&#xff09;理论虽然能达到化学精度&#xff0c;但随着体系增大&#xff0c;计算复杂度…

作者头像 李华
网站建设 2026/7/10 3:06:20

不用配置环境!OpenClaw 2.7.9 Win11 一键安装故障合集

&#x1f50d;前言 OpenClaw&#xff08;圈内昵称小龙虾&#xff09;是当下热度很高的开源 AI 智能体项目&#xff0c;GitHub 累计收获 28 万以上星标。和常规对话类 AI 不同&#xff0c;它能够读懂自然语言并自动执行电脑本地操作&#xff0c;被很多职场人称作数字员工。本文…

作者头像 李华
网站建设 2026/7/10 17:27:11

Appium与Selenium深度对比:跨平台自动化测试选型与实战指南

1. 项目概述&#xff1a;为什么我们需要这份对比指南&#xff1f;干了这么多年测试&#xff0c;从纯手工点点点到引入自动化&#xff0c;再到如今移动端和Web端并行测试成为常态&#xff0c;我见过太多团队在技术选型上踩坑。最典型的一个场景就是&#xff1a;一个项目既有Web管…

作者头像 李华
网站建设 2026/7/10 7:13:39

iTunes登录协议逆向全解析:从抓包到签名算法复现

1. 项目概述&#xff1a;为什么我们要深入iTunes登录协议&#xff1f;如果你曾经尝试过分析苹果生态下的应用行为&#xff0c;比如想搞清楚某个App是如何与服务器通信的&#xff0c;或者想自动化处理一些iTunes Store或App Store的流程&#xff0c;那么你大概率会碰到一个硬骨头…

作者头像 李华