news 2026/5/9 1:24:09

SQLAlchemy 全面教程:常用 API 串联与实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQLAlchemy 全面教程:常用 API 串联与实战指南

大家好,我是jobleap.cn的小九。
关于Python 的 SQLAlchemy 组件的核心用途、解决的问题,以及一套系统的实战教程,我会从核心价值到具体 API 再到实战案例,帮你全面掌握这个工具。

一、SQLAlchemy 核心定位:能做什么?解决什么问题?

1. 核心用途

SQLAlchemy 是 Python 中最流行的ORM(对象关系映射)框架,核心作用是将 Python 的对象模型与关系型数据库的表结构进行映射,让你可以用面向对象的方式操作数据库,无需直接编写复杂的 SQL 语句。

2. 解决的核心问题

  • 告别原生 SQL 硬编码:避免手写大量重复、易出错的 SQL,降低代码与数据库语法的耦合度。
  • 跨数据库兼容:一套代码可适配 MySQL、PostgreSQL、SQLite、Oracle 等主流数据库,切换数据库无需大幅修改代码。
  • 简化数据库操作:封装了数据库连接、事务、CRUD、关联查询等核心操作,提升开发效率。
  • 提升代码可读性:用 Python 类/对象代替 SQL 语句,代码更符合面向对象编程思维,易维护。
  • 安全防护:自动处理 SQL 注入问题,无需手动拼接参数。

二、环境准备

首先安装 SQLAlchemy 和数据库驱动(以 SQLite 为例,无需额外安装服务,适合入门):

pipinstallsqlalchemy# 若使用 MySQL,需额外安装驱动:pip install pymysql# 若使用 PostgreSQL:pip install psycopg2-binary

三、核心 API 解析与串联使用

1. 核心模块与关键 API 概览

模块/类作用
create_engine创建数据库引擎,管理数据库连接池
DeclarativeBase模型基类,所有数据表模型需继承此类
Column定义数据表字段
Integer/String/Boolean字段类型,映射数据库数据类型
Session会话类,用于执行数据库操作(增删改查)
select/insert/update/delete查询构建器,用于构建 SQL 操作语句

2. 基础实战:从建库到 CRUD

步骤 1:初始化引擎与模型定义
fromsqlalchemyimportcreate_engine,Column,Integer,String,Booleanfromsqlalchemy.ormimportDeclarativeBase,Session# 1. 定义模型基类(核心 API:DeclarativeBase)classBase(DeclarativeBase):pass# 2. 定义数据表模型(核心 API:Column + 字段类型)classUser(Base):# 表名__tablename__="users"# 字段定义:id(主键)、name、age、is_activeid=Column(Integer,primary_key=True,autoincrement=True)name=Column(String(50),nullable=False)# 非空字符串,长度50age=Column(Integer,default=0)# 默认值0is_active=Column(Boolean,default=True)# 布尔类型,默认活跃# 3. 创建数据库引擎(核心 API:create_engine)# SQLite 数据库文件:test.db(文件不存在则自动创建)engine=create_engine("sqlite:///test.db")# 4. 创建所有数据表(基于模型)Base.metadata.create_all(engine)
步骤 2:会话操作(增删改查)

会话(Session)是 SQLAlchemy 操作数据库的核心入口,所有 CRUD 都通过会话完成。

(1)新增数据(Create)
# 创建会话(绑定引擎)withSession(engine)assession:# 实例化模型 = 新增一条数据user1=User(name="张三",age=25)user2=User(name="李四",age=30,is_active=False)# 添加数据到会话session.add(user1)session.add_all([user2])# 批量添加# 提交事务(核心:必须提交才会写入数据库)session.commit()# 提交后可获取自动生成的主键 IDprint(f"新增用户1 ID:{user1.id}")print(f"新增用户2 ID:{user2.id}")
(2)查询数据(Read)
fromsqlalchemyimportselectwithSession(engine)assession:# ① 查询所有用户(核心 API:select)stmt=select(User)users=session.execute(stmt).scalars().all()# scalars() 提取模型对象print("所有用户:")foruserinusers:print(f"ID:{user.id}, 姓名:{user.name}, 年龄:{user.age}, 状态:{user.is_active}")# ② 条件查询(按ID查询)stmt=select(User).where(User.id==1)user=session.execute(stmt).scalar_one()# 确保只返回一条print(f"\nID=1 的用户:{user.name}")# ③ 多条件查询(年龄>25 且 活跃)stmt=select(User).where(User.age>25,User.is_active==True)active_users=session.execute(stmt).scalars().all()print(f"\n年龄>25的活跃用户:{[u.nameforuinactive_users]}")
(3)更新数据(Update)
withSession(engine)assession:# 1. 先查询要更新的对象stmt=select(User).where(User.name=="李四")user=session.execute(stmt).scalar_one()# 2. 直接修改对象属性user.age=31user.is_active=True# 3. 提交事务(自动更新)session.commit()print(f"更新后李四的信息:年龄={user.age},状态={user.is_active}")
(4)删除数据(Delete)
withSession(engine)assession:# 1. 先查询要删除的对象stmt=select(User).where(User.id==2)user=session.execute(stmt).scalar_one()# 2. 删除对象session.delete(user)# 3. 提交事务session.commit()print(f"已删除 ID={user.id}的用户")

3. 进阶 API:关联查询(一对多)

SQLAlchemy 核心优势之一是简化表关联,以下是「用户-订单」一对多关联的示例:

fromsqlalchemyimportForeignKeyfromsqlalchemy.ormimportrelationship# 定义订单模型(关联 User)classOrder(Base):__tablename__="orders"id=Column(Integer,primary_key=True,autoincrement=True)order_no=Column(String(20),nullable=False)# 订单号user_id=Column(Integer,ForeignKey("users.id"))# 外键关联用户表# 关联到 User 模型(反向关联:User.orders)user=relationship("User",back_populates="orders")# 给 User 模型添加反向关联User.orders=relationship("Order",back_populates="user",cascade="all, delete-orphan")# 重新创建数据表(新增 orders 表)Base.metadata.create_all(engine)# 新增用户+订单(关联插入)withSession(engine)assession:user=session.execute(select(User).where(User.name=="张三")).scalar_one()# 新增订单并关联用户order1=Order(order_no="ORD20260122001",user=user)order2=Order(order_no="ORD20260122002",user=user)session.add_all([order1,order2])session.commit()# 查询用户的所有订单(关联查询)withSession(engine)assession:user=session.execute(select(User).where(User.name=="张三")).scalar_one()print(f"\n张三的订单:")fororderinuser.orders:print(f"订单号:{order.order_no}")

四、核心场景:解决实际开发问题

1. 批量操作优化

# 批量插入100条数据(高效)withSession(engine)assession:users=[User(name=f"用户{i}",age=20+i)foriinrange(100)]session.add_all(users)session.commit()

2. 事务回滚(异常处理)

withSession(engine)assession:try:user=User(name="王五",age="非数字")# 故意传入错误类型session.add(user)session.commit()exceptExceptionase:# 发生异常时回滚事务session.rollback()print(f"插入失败,已回滚:{e}")

3. 原生 SQL 兼容(特殊场景)

若需执行复杂 SQL,可直接使用原生语句:

withSession(engine)assession:# 执行原生 SQLresult=session.execute("SELECT name, age FROM users WHERE age > :age",{"age":25})forrowinresult:print(f"姓名:{row.name},年龄:{row.age}")

总结

  1. 核心价值:SQLAlchemy 是 ORM 框架,用 Python 对象代替原生 SQL 操作数据库,解决跨库兼容、SQL 注入、代码耦合等问题。
  2. 核心 APIcreate_engine(引擎)、DeclarativeBase(模型基类)、Column(字段)、Session(会话)、select/insert(查询构建器)是最常用的核心接口。
  3. 核心流程:定义模型 → 创建引擎 → 会话操作(CRUD)→ 提交/回滚事务,是使用 SQLAlchemy 的基础范式。

掌握以上内容,你就能应对日常开发中 80% 的数据库操作场景,进阶可深入学习查询优化、索引、多表关联、异步操作等内容。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 3:29:15

LLM知识随笔(二)--BERT

LLM知识随笔(二)–BERT 文章目录 LLM知识随笔(二)--BERT一、BERT:公认的里程碑1. BERT与GPT之间的区别:2.单向编码与双向编码的区别 二、BERT的结构:强大的特征提取能力1.ELMo、GPT、BERT三者区…

作者头像 李华
网站建设 2026/5/9 18:12:29

【软件测试】1_性能测试 _Locust简介安装

文章目录 一、Locust简介1.1 特点 二、Locust安装2.1 命令安装2.2 pycharm安装 一、Locust简介 Locust是一个开源的性能测试工具,主要思想就是模拟一群用户访问你的系统。 1.1 特点 1、在代码中定义用户行为 不需要安装笨重的软件, 只是简单的Python…

作者头像 李华
网站建设 2026/5/6 22:53:05

java_ssm62海洋馆水族馆管理系统

目录具体实现截图海洋馆水族馆管理系统摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 海洋馆水族馆管理系统摘要 海洋馆水族馆管理系统是基于Java SSM(SpringSpringMVCMyBatis&…

作者头像 李华
网站建设 2026/5/8 7:47:41

ArcGIS大师之路500技---064通过字段计算器获得要素几何属性

文章目录前言一、 字段计算器二、不同类型要素的可计算几何属性:三、代码与说明四、几何单位转换前言 本文介绍使用字段计算器获得要素的几何属性。 一、 字段计算器 使用VB脚本解析程序时,字段名始终用 [ ] 括起来。 使用 Python解析程序时&#xff0c…

作者头像 李华
网站建设 2026/5/8 11:11:31

2026亲测!10款能救命的免费降AI率神器【建议收藏】

这两天我的后台简直炸了: “救命啊,论文AI率爆表咋整?导师下了死命令要降低ai率,但我试了一堆免费降ai率工具,全是人工智障。” 说实话,我也经历过这种崩溃。第一稿AI率飙到88%,直接被退稿&…

作者头像 李华
网站建设 2026/5/7 9:12:03

2025年大模型训练革命:RLVR如何让AI真正学会推理?技术干货必读收藏

RLVR(基于可验证奖励的强化学习)在2025年成为大模型训练新范式,与依赖人类反馈的RLHF不同,RLVR通过自动化客观奖励信号驱动模型学习。这种训练方式让模型自主形成推理路径,而非简单模仿。RLVR具备可持续优化能力,使训练重心从单纯…

作者头像 李华