Python SQL 工具包:SQLAlchemy介绍
SQLAlchemy 是一个功能强大且灵活的 Python SQL 工具包和对象关系映射(ORM)库。它被广泛用于与关系型数据库进行交互,提供了从低级 SQL 表达式到高级 ORM 的完整工具链。SQLAlchemy 的设计目标是让开发者能够以 Pythonic 的方式操作数据库,同时保持对底层 SQL 的完全控制。
Pythonic是指遵循Python的设计哲学和最佳实践的编程风格。它强调代码的可读性、简洁性和功能性,鼓励开发者编写清晰、简洁且高效的代码。

以下是 SQLAlchemy 的核心特性及其组成部分的详细介绍:
1. 核心组件
SQLAlchemy 分为两个主要部分:SQLAlchemy Core 和 SQLAlchemy ORM。
SQLAlchemy Core
SQLAlchemy Core 提供了一套低级别的 SQL 表达式语言,允许开发者直接构建 SQL 查询,同时保持跨数据库的兼容性。它的主要特点包括:
- 表定义:通过
Table对象定义数据库表结构。 - SQL 表达式:使用 Python 构建 SQL 查询,例如
select()、insert()、update()等。 - 数据库连接管理:通过
Engine和Connection对象管理数据库连接池。 - 事务支持:支持显式的事务控制。
- 跨数据库兼容性:通过抽象层支持多种数据库后端(如 MySQL、PostgreSQL、SQLite 等)。
示例代码:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String# 创建引擎
engine = create_engine('sqlite:///:memory:', echo=True)# 定义元数据
metadata = MetaData()# 定义表
users = Table('users', metadata,Column('id', Integer, primary_key=True),Column('name', String),Column('age', Integer)
)# 创建表
metadata.create_all(engine)
SQLAlchemy ORM
SQLAlchemy ORM 是更高层次的抽象,允许开发者以面向对象的方式操作数据库。它将数据库表映射为 Python 类(称为模型),并将表中的每一行映射为类的实例。
主要特点:
- 声明式模型:通过继承
Base类定义表结构。 - 会话管理:通过
Session对象管理数据库会话,支持增删改查等操作。 - 延迟加载:优化查询性能,仅在需要时加载相关数据。
- 关联关系:支持表之间的外键关联、一对多、多对多等关系。
示例代码:
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import declarative_base, relationship, sessionmaker# 创建基类
Base = declarative_base()# 定义模型
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)# 创建引擎
engine = create_engine('sqlite:///:memory:', echo=True)# 创建表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 添加数据
new_user = User(name='Alice', age=25)
session.add(new_user)
session.commit()# 查询数据
user = session.query(User).filter_by(name='Alice').first()
print(user.id, user.name, user.age)
2. 主要优势
- 灵活性:既可以使用低级别的 SQL 表达式,也可以使用高级别的 ORM。
- 跨数据库支持:支持多种数据库后端,包括 SQLite、MySQL、PostgreSQL、Oracle 等。
- 强大的表达能力:可以通过 Python 构建复杂的 SQL 查询。
- 事务管理:提供显式事务控制,确保数据一致性。
- 社区活跃:拥有丰富的文档和活跃的社区支持。
3. 适用场景
- 中小型项目:适合需要快速开发的中小型应用。
- 复杂查询需求:对于需要执行复杂 SQL 查询的场景,SQLAlchemy 提供了强大的表达能力。
- 跨数据库开发:在需要支持多种数据库的项目中,SQLAlchemy 的抽象层可以大大减少工作量。
4. 与其他工具的对比
- 与 Django ORM:Django ORM 更加简单易用,但功能相对有限;SQLAlchemy 提供了更灵活的设计和更强大的功能。
- 与 Peewee:Peewee 是另一个轻量级 ORM,适合小型项目,而 SQLAlchemy 更适合大型和复杂项目。
5. 安装
SQLAlchemy 可以通过 pip 安装:
pip install sqlalchemy
如果需要支持特定的数据库(如 MySQL 或 PostgreSQL),还需要安装相应的数据库驱动程序。例如:
pip install pymysql # MySQL 驱动
pip install psycopg2 # PostgreSQL 驱动
总结
SQLAlchemy 是一个功能全面、灵活且高效的 Python 数据库工具包,无论是简单的 CRUD 操作还是复杂的查询逻辑,都能胜任。它在 Python 社区中非常受欢迎,尤其是在需要精细控制数据库交互的场景中表现尤为突出。如果你正在寻找一个强大且灵活的 ORM 工具,SQLAlchemy 是一个非常好的选择。
相关文章:
Python SQL 工具包:SQLAlchemy介绍
SQLAlchemy 是一个功能强大且灵活的 Python SQL 工具包和对象关系映射(ORM)库。它被广泛用于与关系型数据库进行交互,提供了从低级 SQL 表达式到高级 ORM 的完整工具链。SQLAlchemy 的设计目标是让开发者能够以 Pythonic 的方式操作数据库&am…...
Shader属性讲解+Cg语言讲解
CPU调用GPU传递数据 修改Render组件的material属性 在脚本中更改游戏物体材质颜色代码示例: using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestFixedColor : MonoBehaviour {void Start(){//创建预制体GameObjec…...
基于LightGBM-TPE算法对交通事故严重程度的分析与可视化
基于LightGBM-TPE算法对交通事故严重程度的分析与可视化 原文: Analysis and visualization of accidents severity based on LightGBM-TPE 1. 引言部分 文章开篇强调了道路交通事故作为意外死亡的主要原因,引起了多学科领域的关注。分析事故严重性特…...
什么是CRM系统,它的作用是什么?CRM全面指南
CRM(Customer Relationship Management,客户关系管理)系统是一种专门用于集中管理客户信息、优化销售流程、提升客户满意度、支持精准营销、驱动数据分析决策、加强跨部门协同、提升客户生命周期价值的业务系统工具。其中,优化销售…...
MySQL 启动报错:InnoDB 表空间丢失问题及解决方法
MySQL 启动报错:InnoDB 表空间丢失问题及解决方法 在启动 MySQL 时,遇到了如下错误: 2025-01-16T12:43:28.341240Z 0 [ERROR] InnoDB: Tablespace 5975 was not found at ./my_jspt/sw_rtu_message_202408.ibd. 2025-01-16T12:43:28.341244…...
MYSQL之库的操作
创建数据库 语法很简单, 主要是看看选项(与编码相关的): CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1. 语句中大写的是…...
笔记本电脑研发笔记:BIOS,Driver,Preloader详记
在笔记本电脑的研发过程中,Driver(驱动程序)、BIOS(基本输入输出系统)和 Preloader(预加载程序)之间存在着密切的相互关系和影响,具体如下: 相互关系 BIOS 与 Preload…...
同样的html标记,不同语言的文本,显示的字体和粗细会不一样吗
同样的 HTML 标记,在不同语言的文本下,显示出来的字体和粗细确实可能会不一样,原因如下: 🌍 不同语言默认字体不同 浏览器字体回退机制 CSS 里写的字体如果当前系统不支持,就会回退到下一个,比如…...
JavaScript 笔记 --- part 5 --- Web API (part 3)
(webAPI part3) BOM 操作 JS 执行机制 javascript 是单线程的, 也就是说, 只能同时执行一个任务。 为了解决这个问题, 利用多核 CPU 的计算能力, HTML5 提出 Web Worker API, 允许 JavaScript 脚本创建多个线程, 并将任务分配给这些线程。 于是, JS 出现了同步和异步的概念。…...
Linux 下的网络管理(附加详细实验案例)
一、简单了解 NM(NetworkManager) 在 Linux 中,NM 是 NetworkManager 的缩写。它是一个用于管理网络连接的守护进程和工具集。 在 RHEL9 上,使用 NM 进行网络配置,ifcfg (也称为文件)将不再…...
基于SpringBoot的疫情居家检测管理系统(源码+数据库)
514基于SpringBoot的疫情居家检测管理系统,系统包含三种角色:管理员、用户、医生,主要功能如下。 【用户功能】 1. 首页:获取系统信息。 2. 论坛:参与居民讨论和分享信息。 3. 公告:查看社区发布的各类公告…...
关于系统架构思考,如何设计实现系统的高可用?
绪论、系统高可用的必要性 系统高可用为了保持业务连续性保障,以及停机成本量化,比如在以前的双十一当天如果出现宕机,那将会损失多少钱?比如最近几年Amazon 2021年30分钟宕机损失$5.6M。当然也有成功的案例,比如异地…...
MATLAB 控制系统设计与仿真 - 35
MATLAB鲁棒控制器分析 所谓鲁棒性是指控制系统在一定(结构,大小)的参数扰动下,维持某些性能的特征。 根据对性能的不同定义,可分为稳定鲁棒性(Robust stability)和性能鲁棒性(Robust performance)。 以闭环系统的鲁棒性作为目标设计得到的…...
性能比拼: Nginx vs Caddy
本内容是对知名性能评测博主 Anton Putra Nginx vs Caddy Performance 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 引言 在本期视频中,我们将对比 Nginx 和 Caddy---一个用 Go 编写的 Web 服务器和反向代理。 在第一个测试中,我们会使用…...
C++项目-衡码云判项目演示
衡码云判项目是什么呢?简单来说就是这是一个类似于牛客、力扣等在线OJ系统,用户在网页编写代码,点击提交后传递给后端云服务器,云服务器将用户的代码和测试用例进行合并编译,返回结果到网页。 项目最大的两个亮点&…...
李宏毅NLP-6-seq2seqHMM
比较seq2seq和HMM Hidden Markov Model(HMM) 隐马尔可夫模型(HMM)在语音识别中的应用,具体内容如下: 整体流程: 左侧为语音信号(标记为 “speech”),其特征表示为 X X X。中间蓝色模…...
百度暑期实习岗位超3000个,AI相关岗位占比87%,近屿智能携AIGC课程加速人才输出
今年3月,百度重磅发布3000暑期实习岗位,聚焦大模型、机器学习、自动驾驶等AI方向的岗位比例高达87%。此次实习岗位涉及技术研发、产品策划、专业服务、管理支持、政企解决方案等四大类别,覆盖超300个岗位细分方向。值得一提的是,百…...
【技术派后端篇】基于 Redis 实现网站 PV/UV 数据统计
在网站的数据分析中,PV(Page View,页面浏览量)和 UV(Unique Visitor,独立访客数)是两个重要的指标,几乎每个网站都需要对其进行统计。市面上有很多成熟的统计产品,例如百…...
JAVA:利用 Apache Tika 提取文件内容的技术指南
1、简述 Apache Tika 是一个强大的工具,用于从各种文件中提取内容和元数据。📄Tika 支持解析文档、📸图像、🎵音频、🎥视频文件以及其他多种格式,非常适合构建🔍搜索引擎、📂内容管理系统和📊数据分析工具。 样例代码:https://gitee.com/lhdxhl/springboot-…...
【AI】SpringAI 第二弹:接入 DeepSeek 官方服务
一、接入 DeepSeek 官方服务 通过一个简单的案例演示接入 DeepSeek 实现简单的问答功能 1.添加依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency> 2…...
XMLXXE 安全无回显方案OOB 盲注DTD 外部实体黑白盒挖掘
# 详细点: XML 被设计为传输和存储数据, XML 文档结构包括 XML 声明、 DTD 文档类型定义(可 选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的 信息传输…...
SQL之DML(查询语句:select、where)
🎯 本文专栏:MySQL深入浅出 🚀 作者主页:小度爱学习 select查询语句 在开发中,查询语句是使用最多,也是CRUD中,复杂度最高的sql语句。 查询的语法结构 select *|字段1 [, 字段2 ……] from 表…...
Oracle--用户管理
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 用户管理在 Oracle 数据库中至关重要。一个服务器通常只运行一个 Oracle 实例,而一个 Oracle 用户代表一个用户群,他们通过该用…...
MYDB仿MySQL手写数据库项目总结
声明:该项目是一个开源项目,我是在学习该项目,该项目的github地址如下: MYDB项目地址:https://github.com/CN-GuoZiyang/MYDB MYDB项目采用C/S结构,支持启动一个服务器,并有多个客户端去连接…...
24.中医知识问答删除历史对话功能前端代码实现
前端实现对话删除功能的完整指南 功能概述 前篇文章介绍了删除历史对话的后端开发,本篇将介绍如何在前端实现一个完整的对话删除功能,包括用户确认、API调用、状态管理和错误处理等关键环节。 功能拆解 1. 用户确认机制 javascript const confirmDe…...
git忽略已跟踪的文件/指定文件
在项目开发中,有时候我们并不需要git跟踪所有文件,而是需要忽略掉某些指定的文件或文件夹,怎么操作呢?我们分两种情况讨论: 1. 要忽略的文件之前并未被git跟踪 这种情况常用的方法是在项目的根目录下创建和编辑.gitig…...
RAG(检索增强生成)、ReAct(推理与行动) 和 多模态AI 的详细解析,包括三者的定义、工作原理、应用场景及协同关系
以下是 RAG(检索增强生成)、ReAct(推理与行动) 和 多模态AI 的详细解析,包括三者的定义、工作原理、应用场景及协同关系: 一、RAG(Retrieval-Augmented Generation) 1. 核心原理 …...
6.QT-常用控件-QWidget|windowTitle|windowIcon|qrc机制|windowOpacity|cursor(C++)
windowTitle API说明windowTitle()获取到控件的窗⼝标题.setWindowTitle(const QString& title)设置控件的窗⼝标题. 注意!上述设置操作针对不同的widget可能会有不同的⾏为. 如果是顶层widget(独⽴窗⼝),这个操作才会有效. 如果是⼦widget,这个操作⽆任何效果. 代码⽰例…...
Excel/WPS表格中图片链接转换成对应的实际图片
Excel 超链图变助手(点击下载可免费试用) 是一款将链接转换成实际图片,批量下载表格中所有图片的转换工具,无需安装,双击打开即可使用。 表格中链接如下图所示: 操作方法: 1、双击以下图标&a…...
PostgreSQL基础
一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议,这个协议基本和MIT开源协议一样,说人话,就是你可以对PostgreSQL进行一些封装&a…...
