【Python 】一篇吃透Python SQLAlchemy!零基础入门+实战案例+流程图(超全详解)
一篇吃透Python SQLAlchemy零基础入门实战案例流程图超全详解✨前言在Python后端开发中操作数据库几乎是刚需原生SQL语句手写繁琐、可读性差、容易出现注入漏洞而SQLAlchemy作为Python最主流的ORM框架完美解决了这些问题 本文将从零开始带大家全方位掌握SQLAlchemy核心用法包含环境搭建、核心原理、数据库连接、模型定义、增删改查、关联关系全程附可直接运行的代码案例流程图新手也能一键看懂读完本文你可以彻底摆脱原生SQL硬编码优雅实现Python数据库操作一、SQLAlchemy 是什么1.1 ORM 概念ORM对象关系映射将数据库中的数据表、行数据与Python中的类、对象做自动映射无需手写原生SQL通过操作Python对象即可操作数据库。映射关系Python 类 ➡️ 数据库数据表类属性 ➡️ 数据表字段类实例对象 ➡️ 数据表一行数据1.2 SQLAlchemy 优势✅ 跨数据库兼容一套代码可适配MySQL、PostgreSQL、SQLite等无需大幅修改✅ 杜绝SQL注入底层自动参数化处理安全性更高✅ 代码简洁优雅面向对象编程可读性、可维护性极强✅ 功能强大支持事务、关联查询、复杂筛选、分页等高级操作1.3 整体工作流程映射建立连接Session提交事务处理定义ORM模型类数据库表结构创建会话Session数据库操作Python对象执行数据库增删改查数据持久化到数据库二、环境安装️安装核心依赖支持Python3.7版本# 安装sqlalchemy核心库pip install sqlalchemy# 若使用MySQL需额外安装驱动pip install pymysql三、核心组件详解SQLAlchemy 四大核心组件必须掌握Engine引擎数据库连接核心负责建立和数据库的连接Base基类所有ORM模型类的父类用于统一映射表结构Session会话数据库操作核心所有增删改查都通过会话完成Column/字段类型定义数据表字段、约束、类型四、完整入门案例SQLite先使用无需安装服务的SQLite数据库快速上手零门槛运行4.1 基础初始化引擎、基类、会话fromsqlalchemyimportcreate_enginefromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmaker# 1. 创建数据库引擎SQLite本地文件数据库enginecreate_engine(sqlite:///test.db,echoTrue)# echoTrue 打印执行的SQL语句方便调试# 2. 创建ORM基类Basedeclarative_base()# 3. 创建会话工厂绑定引擎SessionLocalsessionmaker(autocommitFalse,autoflushFalse,bindengine)# 4. 获取会话实例dbSessionLocal()4.2 定义数据模型创建数据表自定义用户模型类映射user数据表fromsqlalchemyimportColumn,Integer,String,DateTimefromdatetimeimportdatetime# 自定义用户模型classUser(Base):# 数据表名称__tablename__user# 定义字段idColumn(Integer,primary_keyTrue,autoincrementTrue,comment主键ID)usernameColumn(String(30),nullableFalse,uniqueTrue,comment用户名)ageColumn(Integer,nullableTrue,comment年龄)emailColumn(String(50),uniqueTrue,comment邮箱)create_timeColumn(DateTime,defaultdatetime.now,comment创建时间)# 批量创建所有数据表执行映射Base.metadata.create_all(bindengine)print(数据表创建成功)字段核心参数说明primary_keyTrue主键autoincrementTrue自增nullableFalse非空约束uniqueTrue唯一约束default默认值五、核心增删改查实战基于上面的User模型实现全套数据库CRUD操作代码可直接运行5.1 新增数据Create# 单条新增user1User(username张三,age20,emailzhangsan163.com)db.add(user1)# 批量新增user_list[User(username李四,age22,emaillisi163.com),User(username王五,age25,emailwangwu163.com)]db.add_all(user_list)# 提交事务必须提交数据才会写入数据库db.commit()print(数据新增成功)5.2 查询数据Read【最常用】支持全量查询、条件查询、模糊查询、分页、排序等操作# 1. 查询所有数据all_usersdb.query(User).all()foruserinall_users:print(fID:{user.id}, 用户名:{user.username}, 年龄:{user.age})# 2. 根据主键查询单条数据userdb.query(User).get(1)print(主键查询结果,user.usernameifuserelse无数据)# 3. 条件查询精准匹配userdb.query(User).filter(User.username张三).first()print(条件查询,user.age)# 4. 多条件查询userdb.query(User).filter(User.age22,User.email.like(%163.com)).first()# 5. 模糊查询usersdb.query(User).filter(User.username.like(%五%)).all()# 6. 排序查询倒序usersdb.query(User).order_by(User.age.desc()).all()# 7. 分页查询page页码limit每页条数page_usersdb.query(User).limit(2).offset(0).all()5.3 修改数据Update修改数据需先查询、再赋值、最后提交# 方式1单条数据修改userdb.query(User).get(1)ifuser:user.age21# 修改字段值user.emailzhangsan_new163.comdb.commit()print(数据修改成功)# 方式2批量条件修改db.query(User).filter(User.age22).update({age:23})db.commit()5.4 删除数据Delete# 方式1删除单条数据userdb.query(User).get(3)ifuser:db.delete(user)db.commit()# 方式2批量条件删除db.query(User).filter(User.username李四).delete()db.commit()print(数据删除成功)六、MySQL 数据库适配上面案例是SQLite切换MySQL仅需修改引擎连接地址其余代码完全不用改完美体现跨库优势# MySQL连接格式mysqlpymysql://账号:密码主机:端口/数据库名enginecreate_engine(mysqlpymysql://root:123456localhost:3306/test_db,echoTrue,pool_pre_pingTrue,# 自动检测连接有效性pool_recycle3600# 连接回收时间)⚠️ 注意使用MySQL需提前手动创建好数据库test_db无需创建数据表代码自动生成七、事务处理机制✅数据库事务是开发核心SQLAlchemy默认开启事务出错需回滚避免数据异常try:# 执行数据库操作userUser(username小明,age18)db.add(user)# 模拟报错1/0db.commit()exceptExceptionase:# 异常回滚撤销所有操作db.rollback()print(f操作失败事务回滚{e})finally:# 关闭会话db.close()八、一对多关联查询实战实际开发中常用表关联这里演示最经典的用户-文章一对多关系一个用户对应多篇文章8.1 定义关联模型fromsqlalchemy.ormimportrelationship,ForeignKey# 用户表主表classUser(Base):__tablename__useridColumn(Integer,primary_keyTrue,autoincrementTrue)usernameColumn(String(30),nullableFalse)# 关联文章表反向查询articlesrelationship(Article,back_populatesauthor)# 文章表从表classArticle(Base):__tablename__articleidColumn(Integer,primary_keyTrue,autoincrementTrue)titleColumn(String(100),nullableFalse,comment文章标题)contentColumn(String(500),comment文章内容)# 外键关联用户表user_idColumn(Integer,ForeignKey(user.id),comment用户ID)# 关联用户表authorrelationship(User,back_populatesarticles)# 创建表Base.metadata.create_all(bindengine)8.2 关联数据查询# 查询用户对应的所有文章userdb.query(User).first()print(f用户【{user.username}】的所有文章)forarticleinuser.articles:print(f文章标题{article.title})# 查询文章对应的作者articledb.query(Article).first()print(f文章作者{article.author.username})8.3 关联关系流程图一对多关联反向查询所有文章正向查询所属用户User表 主表Article表 从表user.id 主键article.user_id 外键User.articlesArticle.author九、常用踩坑总结⚠️新增/修改/删除数据后必须执行commit()数据才会持久化代码报错务必执行rollback()回滚事务避免锁表MySQL连接失败优先检查账号密码、端口、数据库是否存在、是否开启远程连接字段默认值不生效时检查是否设置default且已提交事务关联查询报错优先检查relationship和外键是否匹配十、总结本文全覆盖讲解了SQLAlchemy核心知识点掌握ORM核心映射原理、四大核心组件熟练实现 SQLite/MySQL 数据库连接、模型定义精通全套增删改查、条件筛选、分页排序操作掌握事务处理、一对多表关联高级用法SQLAlchemy是Python后端FastAPI/Flask/Django必备技能熟练使用可以极大提升开发效率告别繁琐原生SQL后续更新SQLAlchemy多对多关联、原生SQL混合查询、批量操作、异步用法

相关新闻

读懂固态变压器:架构、隐患、一站式在线防护

读懂固态变压器:架构、隐患、一站式在线防护

在新型电力系统、光伏储能、微电网、数据中心高压供电场景中,固态变压器(SST)正在逐步替代传统工频变压器,成为智能变电、柔性配电的核心设备。相比于传统变压器笨重、功能单一、无法智能调控的短板,SST凭借高频化、小…

2026/7/22 15:24:40阅读更多 →
锂电牵引辊分层包胶工艺具备哪些行业应用优势?

锂电牵引辊分层包胶工艺具备哪些行业应用优势?

新能源锂电制造行业持续向高速、洁净、高精度方向升级,涂布、分切、卷绕工序所用锂电牵引辊是输送铜铝箔、隔膜、极片的核心配套部件。一体式单层包胶辊在长期高速运转、溶剂接触、持续受压工况下,容易出现胶层脱胶、鼓泡、表面析出杂质、辊面磨损过快等…

2026/7/22 15:22:40阅读更多 →
linux的特殊权限

linux的特殊权限

权限umask 默认值为00220022Special bitugo默认权限 目录的默认权限是 777 - umask 755文件的默认权限是目录的默认权限去掉执行权限(x 1):755 - 111 644非特权用户默认的 umask 0022(0022,且在/etc/bashrc中定义 …

2026/7/22 15:22:40阅读更多 →
Java程序员转型大模型开发的6个月速成指南

Java程序员转型大模型开发的6个月速成指南

1. 为什么Java程序员适合转型大模型开发作为拥有十年Java开发经验的程序员,我去年开始接触大模型领域,发现Java背景其实为我们转型提供了独特优势。很多人认为大模型就是Python的天下,这种认知其实存在误区。Java程序员最核心的优势在于工程化…

2026/7/22 16:22:53阅读更多 →
DDR5和DDR4实现同机部署内存扩容!元脑服务器推出CXL内存跨代扩展方案

DDR5和DDR4实现同机部署内存扩容!元脑服务器推出CXL内存跨代扩展方案

元脑服务器推出CXL(Compute Express Link)内存跨代扩展方案,实现了DDR5和DDR4同机部署内存扩容。基于元脑服务器NF5280,在24条本地DDR5内存基本配置下,通过创新自研CXL内存扩展卡,单机最多可扩展16条DDR4内…

2026/7/22 16:22:53阅读更多 →
AM335x PLL配置实战:从PRCM寄存器到74.25MHz像素时钟生成

AM335x PLL配置实战:从PRCM寄存器到74.25MHz像素时钟生成

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于复杂SoC(片上系统)的设计中,时钟管理是决定系统稳定性、性能和功耗的基石。它就像整个系统的心跳,频率不准或者不稳定,轻则导致外设通信失败、数据出错&a…

2026/7/22 16:22:53阅读更多 →
TI处理器PLL寄存器配置实战:从原理到代码实现

TI处理器PLL寄存器配置实战:从原理到代码实现

1. 项目概述与PLL核心价值在嵌入式系统开发,尤其是基于TI处理器(如AM335x、AM57x系列)的项目中,时钟系统的设计与调试往往是决定系统稳定性和性能上限的关键环节。我接触过不少项目,初期跑起来看似一切正常&#xff0c…

2026/7/22 16:22:53阅读更多 →
降AIGC率是不是智商税?讲清原理看它怎么降到达标

降AIGC率是不是智商税?讲清原理看它怎么降到达标

降AIGC率是不是智商税?讲清原理看它怎么降到达标 你心里其实是带着点怀疑点进来的。看到那么多"降 AIGC 率"的工具,你第一反应不是激动,是警惕:这会不会又是收割焦虑的智商税?是不是随便换几个词、糊弄一下…

2026/7/22 16:22:52阅读更多 →
基于TI DM642与RF-5框架的MPEG-2实时编解码系统设计与调优

基于TI DM642与RF-5框架的MPEG-2实时编解码系统设计与调优

1. 项目概述与核心价值在嵌入式多媒体处理领域,实时视频编解码一直是个硬骨头。尤其是在二十年前,当德州仪器(TI)的TMS320DM642这类高性能数字信号处理器(DSP)刚面世时,如何在其上稳定、高效地跑…

2026/7/22 16:20:52阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →