2026/5/20 18:28:13
网站建设
项目流程
哪些网站上可以做seo推广的,阿里虚拟主机无法安装wordpress,网站开发流程比较合理,建设网站的建设费用包括什么大家好#xff0c;我是jobleap.cn的小九。
关于Python 的 SQLAlchemy 组件的核心用途、解决的问题#xff0c;以及一套系统的实战教程#xff0c;我会从核心价值到具体 API 再到实战案例#xff0c;帮你全面掌握这个工具。
一、SQLAlchemy 核心定位#xff1a;能做什么我是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# 若使用 PostgreSQLpip 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. 定义模型基类核心 APIDeclarativeBaseclassBase(DeclarativeBase):pass# 2. 定义数据表模型核心 APIColumn 字段类型classUser(Base):# 表名__tablename__users# 字段定义id主键、name、age、is_activeidColumn(Integer,primary_keyTrue,autoincrementTrue)nameColumn(String(50),nullableFalse)# 非空字符串长度50ageColumn(Integer,default0)# 默认值0is_activeColumn(Boolean,defaultTrue)# 布尔类型默认活跃# 3. 创建数据库引擎核心 APIcreate_engine# SQLite 数据库文件test.db文件不存在则自动创建enginecreate_engine(sqlite:///test.db)# 4. 创建所有数据表基于模型Base.metadata.create_all(engine)步骤 2会话操作增删改查会话Session是 SQLAlchemy 操作数据库的核心入口所有 CRUD 都通过会话完成。1新增数据Create# 创建会话绑定引擎withSession(engine)assession:# 实例化模型 新增一条数据user1User(name张三,age25)user2User(name李四,age30,is_activeFalse)# 添加数据到会话session.add(user1)session.add_all([user2])# 批量添加# 提交事务核心必须提交才会写入数据库session.commit()# 提交后可获取自动生成的主键 IDprint(f新增用户1 ID{user1.id})print(f新增用户2 ID{user2.id})2查询数据ReadfromsqlalchemyimportselectwithSession(engine)assession:# ① 查询所有用户核心 APIselectstmtselect(User)userssession.execute(stmt).scalars().all()# scalars() 提取模型对象print(所有用户)foruserinusers:print(fID:{user.id}, 姓名:{user.name}, 年龄:{user.age}, 状态:{user.is_active})# ② 条件查询按ID查询stmtselect(User).where(User.id1)usersession.execute(stmt).scalar_one()# 确保只返回一条print(f\nID1 的用户{user.name})# ③ 多条件查询年龄25 且 活跃stmtselect(User).where(User.age25,User.is_activeTrue)active_userssession.execute(stmt).scalars().all()print(f\n年龄25的活跃用户{[u.nameforuinactive_users]})3更新数据UpdatewithSession(engine)assession:# 1. 先查询要更新的对象stmtselect(User).where(User.name李四)usersession.execute(stmt).scalar_one()# 2. 直接修改对象属性user.age31user.is_activeTrue# 3. 提交事务自动更新session.commit()print(f更新后李四的信息年龄{user.age}状态{user.is_active})4删除数据DeletewithSession(engine)assession:# 1. 先查询要删除的对象stmtselect(User).where(User.id2)usersession.execute(stmt).scalar_one()# 2. 删除对象session.delete(user)# 3. 提交事务session.commit()print(f已删除 ID{user.id}的用户)3. 进阶 API关联查询一对多SQLAlchemy 核心优势之一是简化表关联以下是「用户-订单」一对多关联的示例fromsqlalchemyimportForeignKeyfromsqlalchemy.ormimportrelationship# 定义订单模型关联 UserclassOrder(Base):__tablename__ordersidColumn(Integer,primary_keyTrue,autoincrementTrue)order_noColumn(String(20),nullableFalse)# 订单号user_idColumn(Integer,ForeignKey(users.id))# 外键关联用户表# 关联到 User 模型反向关联User.ordersuserrelationship(User,back_populatesorders)# 给 User 模型添加反向关联User.ordersrelationship(Order,back_populatesuser,cascadeall, delete-orphan)# 重新创建数据表新增 orders 表Base.metadata.create_all(engine)# 新增用户订单关联插入withSession(engine)assession:usersession.execute(select(User).where(User.name张三)).scalar_one()# 新增订单并关联用户order1Order(order_noORD20260122001,useruser)order2Order(order_noORD20260122002,useruser)session.add_all([order1,order2])session.commit()# 查询用户的所有订单关联查询withSession(engine)assession:usersession.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(namef用户{i},age20i)foriinrange(100)]session.add_all(users)session.commit()2. 事务回滚异常处理withSession(engine)assession:try:userUser(name王五,age非数字)# 故意传入错误类型session.add(user)session.commit()exceptExceptionase:# 发生异常时回滚事务session.rollback()print(f插入失败已回滚{e})3. 原生 SQL 兼容特殊场景若需执行复杂 SQL可直接使用原生语句withSession(engine)assession:# 执行原生 SQLresultsession.execute(SELECT name, age FROM users WHERE age :age,{age:25})forrowinresult:print(f姓名{row.name}年龄{row.age})总结核心价值SQLAlchemy 是 ORM 框架用 Python 对象代替原生 SQL 操作数据库解决跨库兼容、SQL 注入、代码耦合等问题。核心 APIcreate_engine引擎、DeclarativeBase模型基类、Column字段、Session会话、select/insert查询构建器是最常用的核心接口。核心流程定义模型 → 创建引擎 → 会话操作CRUD→ 提交/回滚事务是使用 SQLAlchemy 的基础范式。掌握以上内容你就能应对日常开发中 80% 的数据库操作场景进阶可深入学习查询优化、索引、多表关联、异步操作等内容。