发布时间:2026/9/7 4:45:22
【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混合查询、批量操作、异步用法

相关新闻

2026/9/1 15:38:19

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

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

2026/8/31 7:11:32

会话内斜杠命令

命令 功能 /new 开始新会话 /clear 清屏并开始新会话 /undo 撤销上一次用户/Agent 交互记录 /undo [N] v0.16&#xff1a;撤销最近 N 轮交互 /title <session_name> 为当前会话命名 /history 显示对话历史 /sessions 查看和管理会话 /compress 手动压缩上下文 /stop 停止…

2026/9/7 4:43:53

机器学习异常值检测与处理:从IQR到孤立森林的完整指南

我在实际做机器学习项目时&#xff0c;最怕的不是模型训练时间太长&#xff0c;而是数据清洗阶段漏掉了异常值。几个极端样本看起来不影响大局&#xff0c;却能让均值失效、让线性回归系数明显偏移、让聚类结果面目全非。异常值&#xff0c;也叫离群点&#xff0c;简单理解就是…

2026/9/7 4:43:53

磐镭/小影霸GTX1080专用驱动441.66安装指南与故障排查

简介&#xff1a;磐镭或小影霸1080显卡用户现在可获得官方最新专用驱动441.66&#xff0c;该版本基于英伟达技术更新&#xff0c;重点解决显卡在运行新游戏和图形软件时的兼容性问题&#xff0c;同时优化性能、系统稳定性与安全性&#xff0c;对游戏场景切换、图形渲染效率和新…

2026/9/7 4:43:53

美的熊墩墩Pro冰箱实测:超薄嵌入、双系统2.0与除菌升级全解析

这次我们来看一台大件家电&#xff1a;美的熊墩墩Pro&#xff0c;一台600L法式四开门冰箱。标题信息里直接点出的重点是超薄嵌入式、双系统2.0和除菌升级&#xff0c;这几个词基本把当前中高端冰箱的技术路线概括完了&#xff1a;容量要大、嵌入要薄、控温要分系统、除菌要跟上…

2026/9/7 4:43:53

.NET诊断专家:从报错到根因的实战排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 4:38:53

Milstein方法全解析:从随机微分方程到线代学习

简介&#xff1a;面向随机微分方程与常微分方程数值求解的Milstein方法MATLAB实现&#xff0c;特别适合金融数学、生物物理及随机动力系统模拟方向的科研与工程人员参考。该方法基于Ito积分理论&#xff0c;在Euler-Maruyama方法基础上引入二阶导数项&#xff0c;将SDE离散化后…

2026/9/7 0:47:43

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/7 0:14:19

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/7 0:14:17

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/7 0:03:36

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目&#xff1a;基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念&#xff0c;但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测&#xff0c;PyQt5 负责提供可视化的桌面交互界…

2026/9/7 0:03:36

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介&#xff1a;UL 1642是锂电池安全领域的重要规范&#xff0c;本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读&#xff0c;用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件&#xff0c;压缩包大小834KB&#xff0c;便…

2026/9/7 0:03:36

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介&#xff1a;BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本&#xff0c;由BSI标准出版&#xff0c;重点规定游乐设施和游乐设备在设计与制造环节的安全准则&#xff0c;与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/6 19:33:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…