当前位置: 首页 > news >正文

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_()
http://www.cnnetsun.cn/news/3059112.html

相关文章:

  • WorkshopDL终极指南:如何免费下载1000+游戏的Steam创意工坊模组
  • 简述:青蛙腹(长期久坐最典型)
  • 量子化学计算:从传统方法到量子启发算法
  • 不用配置环境!OpenClaw 2.7.9 Win11 一键安装故障合集
  • Appium与Selenium深度对比:跨平台自动化测试选型与实战指南
  • iTunes登录协议逆向全解析:从抓包到签名算法复现
  • 冥想第一千九百二十四天
  • ZS315D Type-C母座转DP 8K 双向互转方案
  • 2026年物联网与智能制造国际学术会议(IoT-IM 2026)
  • Fillinger智能填充脚本高效自动化解决方案
  • 华大九天加大投资并购力度,韬定律驱动EDA全流程加速布局
  • C++ 模板与泛型编程
  • 2026实测12款论文降AI率软件,效果最好的竟然是它!
  • MySQL全量SQL语句超全整理|语法规范、实战案例、易错点避坑大全(零基础可收藏)
  • slab 对象池的三种实现方式
  • ESP32 入门教程(一):使用 GPIO 控制 LED 亮灭
  • 五大平台联动:2026数字营销新法则
  • 比 iTerm2 更适合 Claude Code/Codex 的终端,我换成 Ghostty 了
  • 联想拯救者BIOS隐藏功能解锁:5分钟释放你的笔记本全部性能
  • 单台Nginx部署多个前端项目:IP路径区分 \+ 域名区分完整实战
  • 计算机毕业设计之基于深度学习的老年人的心脏健康系统
  • Java毕设项目:基于 SpringBoot 的救灾物资库存预警与补给系统设计 灾情救援物资数字化管控与分配系统设计与开发 (源码+文档,讲解、调试运行,定制等)
  • 在江西体验正规峡谷漂流,真实感受究竟怎么样?
  • 全网独一份!华为、华三、中兴、锐捷、迈普、烽火六厂商远程登录配置速查手册
  • 环境变量配置法:通过 HTTP_PROXY 让OpenClaw走代理的最佳实践
  • Netskope Universal ZTNA 以一致的、基于身份和风险的访问控制方式,取代 NAC 和 VDI,适用于 IT、OT 和 IoT 等各种环境。
  • Web安全入门:从MD5前端加密案例解析JS逆向与密码传输风险
  • 083题库
  • Spring AI 1.1.5 正式发布,又一个大模型被移除了。。
  • Modbus详解