SQLAlchemy 入门与 ORM 基础:用 Python 对象操作数据库
SQLAlchemy 入门与 ORM 基础用 Python 对象操作数据库这是一篇面向新手的技术博客。很多同学一听到操作数据库就想到写 SQL但其实在 Python 里我们可以用SQLAlchemy这种 ORM 框架像操作普通 Python 对象一样去增删改查几乎不用手写 SQL。一、什么是 SQLAlchemySQLAlchemy 是 Python 里最流行的ORMObject-Relational Mapping对象关系映射框架之一。它做了一件很巧的事把 Python 里的类/对象和数据库里的表/行一一对应起来。你操作的是 Python 对象它背后帮你翻译成 SQL 去执行。当然它也允许你直接写原生 SQL 混合使用。ORM 读音小知识SQLAlchemy 里的 Alchemy 读作 /ˈælkəmi/意思是炼金术——把代码炼成数据库操作还挺形象的。为什么要用它核心优势跨数据库兼容同一套代码底层可以换 MySQL、PostgreSQL、SQLite、Oracle 等只要换驱动和连接串不用死记 SQL 语法用 Python 风格写查询可读性好类型自动转换Python 的datetime自动对应数据库的DATETIME事务 关联查询复杂操作也有成熟支持从个人项目到企业级都能用。Core 与 ORM 两大模块SQLAlchemy 的内核分两层Core核心组件底层数据库交互引擎负责 SQL 表达式构建、连接管理ORM对象关系映射架在 Core 之上的封装实现对象 ↔ 表的映射。这是我们学习的重点。五大核心概念概念作用Engine引擎核心入口管理数据库连接由连接字符串创建决定数据库类型、地址、账号密码Session会话与数据库交互的桥梁所有增删改查都通过它完成相当于一个临时连接会话Base基类所有 ORM 模型类的父类子类会自动映射成数据库里的表Model模型一个 Python 类 一张表类属性 字段类实例 一行数据Column字段定义模型属性即表字段可指定类型、主键、非空、默认值等约束二、快速开始2.1 环境准备① 安装库以 MySQL 为例其他数据库驱动见下方说明其他数据库驱动PostgreSQLpip install psycopg2-binarySQLite无需额外安装Python 自带Oraclepip install cx_Oracle安装后验证无报错即成功② 准备数据库SQLAlchemy 只建表、不建库库要自己先建好2.2 创建 Engine连接数据库连接字符串格式数据库驱动://用户名:密码主机:端口/数据库名?参数root/123456换成你自己的账号密码sqlalchemy_demo要连接的库名需提前建好echoTrue调试神器能直接看到 SQLAlchemy 帮你拼的 SQL。2.3 定义 Base 与 Model模型常用字段类型Integer→ MySQL 的 INTString(n)→ VARCHAR(n)DateTime→ DATETIMEFloat→ FLOAT / DOUBLEBoolean→ TINYINT(1)常用字段约束参数类型说明primary_keybool是否为主键autoincrementbool / str是否自增nullablebool是否允许为空默认 Trueuniquebool是否唯一约束indexbool是否建普通索引defaultAnyPython 层面的默认值server_default表达式/字符串数据库层面的默认值如now()commentstr字段注释onupdateAny更新时自动赋值ondeletestr外键删除规则CASCADE / SET NULL 等namestr数据库真实字段名不写用属性名2.4 创建数据表执行后sqlalchemy_demo库里就会多一张user表去客户端看一眼结构验证一下。2.5 第一个增 / 查示例Session所有操作都绕不开 Session创建 → 操作 → 提交 → 关闭。 更推荐with写法自动关闭会话不用手动close()2.6 快速开始练习清单把上面几步串起来你其实已经走通了完整链路初始化配置导入create_engine、declarative_base、字段类型写好连接串创建engine再declarative_base()得到Base写模型类继承Base设__tablename__用Column()照着表结构映射字段加一条数据sessionmaker(bindengine)建工厂 → 工厂() 建会话 →add(对象)→commit()→close()。三、ORM 核心操作 CRUD实战中我们通常会把配置和模型抽成独立文件避免每个脚本都写一遍。3.1 抽取通用配置sqlalchemy_config.py3.2 模型类base_model.py 之后所有脚本都from sqlalchemy_config import SessionFactory和from base_model import User即可不用重复写连接逻辑。3.3 Read查询SQLAlchemy 查询核心是query()1.x 风格或select()2.0 风格下面以query()为主。① 基础查询② 条件查询filter③ 排序 分页④ 分组查询聚合函数用到func里的count / sum / avg / max / min函数作用func.count(列)数量func.sum(列)求和func.avg(列)平均值func.max(列)最大值func.min(列)最小值 分组查询里用到的Account模型含age字段与User定义方式完全一样本文未展开你照着User写一个即可。3.4 Create新增步骤建实例 →add→commit。3.5 Delete删除步骤查到 →delete→commit。3.6 Update更新步骤查到 → 改属性 →commit。四、本章重点速记SQLAlchemy 是 Python 最流行的 ORM用对象操作数据库少写 SQL内核两层Core引擎层 ORM映射层重点学 ORM五大件Engine / Session / Base / Model / Column标准流程create_engine→ 定义模型 →Base.metadata.create_all建表 →sessionmaker建会话 → CRUD →commit查询两大风格1.x 的session.query()和2.0 的select()文档里都给了建议两种都了解别忘了commit()——不提交改动只在内存里不会进库。五、常见问题 / 踩坑Q1导入declarative_base报弃用警告文档旧写法from sqlalchemy.ext.declarative import declarative_base仍能跑但 2.0 推荐from sqlalchemy.orm import declarative_base本文已采用新写法直接用即可。Q2代码里from sqlalchemy_config import ...报错那是把配置抽到了独立文件sqlalchemy_config.py见 3.1 节。确保这个文件和你的脚本在同一目录或已加入PYTHONPATH并且里面定义了SessionFactory和Base。Q3为什么add之后查不到数据忘记session.commit()了。只有提交事务数据才会真正写入数据库。Q4用with SessionFactory() as session还需要手动close()吗不需要with结束时自动关闭比手写close()更安全。Q5query()和select()该用哪个新项目建议优先学 2.0 的select()风格配合session.execute(stmt)但大量老教程和本文的条件/排序示例用的是query()两种都看得懂才不会被卡住。

相关新闻

计算机考试-表格-东方仙盟

计算机考试-表格-东方仙盟

2026/10/25 18:37:11 阅读更多 →
医疗大模型C端产品爆发前夜:视觉设计正在成为新的核心壁垒

医疗大模型C端产品爆发前夜:视觉设计正在成为新的核心壁垒

026年的医疗AI赛道,正在经历一个微妙但关键的转折——从“模型能力竞赛”转向“产品体验竞争”。今年1月,OpenAI正式推出OpenAI Health。数据显示,早在该产品正式发布之前,全球每周就有超过2.3亿人次在ChatGPT上咨询健康问题。这种…

2026/10/25 8:03:46 阅读更多 →
ChatGPT Plus已经够强了,为什么使用Codex后还是频繁遇到额度瓶颈?

ChatGPT Plus已经够强了,为什么使用Codex后还是频繁遇到额度瓶颈?

很多用户升级ChatGPT Plus以后,日常对话、写作、文件分析和代码问答都已经足够流畅。但真正开始使用Codex处理项目后,却会产生一种明显落差:明明没有写多少代码,为什么额度消耗得这么快? 明明只是修改一个功能&#xf…

2026/10/25 22:23:56 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/26 8:34:37 阅读更多 →