从零开始的Python开发日记(6):如何使用SQLAlchemy

SQLAlchemy ORM 使用教程

SQLAlchemy 是 Python 生态系统中非常流行的 SQL 工具包和对象关系映射(ORM)库。它提供了一种高效的方法来处理数据库操作,使开发者能够通过 Python 对象与数据库进行交互。本文将详细介绍 ORM 的定义和含义,Python 中最常用的 ORM,SQLAlchemy 的优点,并逐步展示如何使用 SQLAlchemy ORM 进行数据库操作。

什么是 ORM?

对象关系映射(Object Relational Mapping,简称 ORM)是一种用于将关系数据库中的数据映射到面向对象编程语言中的对象的技术。它通过将数据库表映射到类,将表中的行映射到类的实例,从而使开发者能够通过编程语言的对象来操作数据库,而不需要编写复杂的 SQL 语句。

ORM 的核心思想是:

  • 映射到
  • 映射到 类的实例
  • 映射到 类的属性
Python 中最常用的 ORM

在 Python 生态系统中,有多个流行的 ORM 库:

  1. Django ORM:Django 框架自带的 ORM,功能强大且与 Django 无缝集成。
  2. SQLAlchemy:功能强大且灵活性高的 ORM,支持多种数据库,适用于各种规模的项目。
  3. Peewee:一个小巧且易于使用的 ORM,适用于小型项目。
  4. Tortoise ORM:一个现代的异步 ORM,专为 Python 的 asyncio 设计。
为什么选择 SQLAlchemy?

SQLAlchemy 是一个功能强大的 ORM,具有以下优点:

  • 灵活性:SQLAlchemy 提供了 ORM 和 Core(SQL 表达式语言)两种模式,适用于不同需求的开发者。
  • 性能:通过延迟加载、批量操作等优化技术,SQLAlchemy 能够高效地进行数据库操作。
  • 兼容性:支持多种数据库,包括 SQLite、PostgreSQL、MySQL、Oracle 等。
  • 扩展性:可以通过插件和扩展来增强功能,满足复杂的需求。
  • 社区和文档:拥有活跃的社区和详尽的文档,方便开发者查找和解决问题。
SQLAlchemy ORM 的使用

下面将逐步展示如何使用 SQLAlchemy ORM 进行数据库操作。

1. 安装 SQLAlchemy

首先,使用 pip 安装 SQLAlchemy:

pip install sqlalchemy
2. 创建数据库引擎

创建一个数据库引擎,用于连接数据库。这里我们使用 SQLite 数据库:

from sqlalchemy import create_engine# 创建 SQLite 数据库引擎
engine = create_engine('sqlite:///example.db', echo=True)

echo=True 参数会在控制台输出生成的 SQL 语句,方便调试。

3. 定义模型

定义一个基类,并使用它来定义数据库表的模型:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String# 创建一个基类
Base = declarative_base()# 定义 User 类来表示 users 表
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)
4. 创建表

使用模型类来创建数据库表:

# 创建所有表
Base.metadata.create_all(engine)
5. 创建会话

使用 sessionmaker 创建一个会话,用于进行数据库操作:

from sqlalchemy.orm import sessionmaker# 创建会话
Session = sessionmaker(bind=engine)
session = Session()
6. 添加数据

将数据添加到数据库中:

# 创建一个新用户
new_user = User(name='Alice', age=25)# 添加到会话
session.add(new_user)# 提交会话
session.commit()
7. 查询数据

从数据库中查询数据:

# 查询所有用户
users = session.query(User).all()
for user in users:print(user.name, user.age)
8. 更新数据

更新数据库中的数据:

# 查询用户
user_to_update = session.query(User).filter_by(name='Alice').first()# 更新数据
user_to_update.age = 26
session.commit()
9. 删除数据

删除数据库中的数据:

# 查询用户
user_to_delete = session.query(User).filter_by(name='Alice').first()# 删除数据
session.delete(user_to_delete)
session.commit()
结论

SQLAlchemy 是一个功能强大且灵活的 ORM 库,适用于各种规模的项目。通过本文的介绍,你应该能够理解 ORM 的基本概念,并掌握使用 SQLAlchemy 进行数据库操作的基本方法。SQLAlchemy 提供了丰富的功能和优化技术,使你能够高效地进行数据库开发。如果你对数据库操作有更多的需求,可以查阅 SQLAlchemy 的官方文档,进一步学习和探索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【03】Java虚拟机是如何加载Java类的

从class文件到内存中的类,按先后顺序需要经过加载、链接以及初始化三个步骤 一、加载 加载就是查找字节流,并且据此创建类的过程。 除了启动类加载器(所有类加载器的祖师爷,由C实现,没有对应的Java对象)之外…

大话成像公众号文章阅读学习(二)--- 下一代 AI-ISP会更好

系列文章目录 文章目录 系列文章目录前言一、AI-ISP1.1 定义与工作原理1.2 应用场景 二、展望总结 前言 这篇是 下一代 AI-ISP会更好 文章地址:https://mp.weixin.qq.com/s/N3YnkXF_stvP6k3jRTKCpQ 一、AI-ISP 1.1 定义与工作原理 定义:AI-ISP&#…

GEE:多面板同步缩放查看多源数据,并实现交互选点构建NDVI曲线

一. 目标 ①构建三个面板,分别显示不同来源数据; ②面板1显示哨兵数据面版2显示谷歌高清数据面板3实现用户任意交互选点,并以该点为中心构建正方形,随后生成该正方形的区域NDVI平均值长时序曲线; ③保证前两个面板可…

19.延迟队列优化

问题 前面所讲的延迟队列有一个不足之处,比如现在有一个需求需要延迟半个小时的消息,那么就只有添加一个新的队列。那就意味着,每新增一个不同时间需求,就会新创建一个队列。 解决方案 应该讲消息的时间不要跟队列绑定&#xf…

ANR分析及解决方案

ANR分析及解决方案 首先,什么是ANR?那么,为什么会发生ANR?哪些场景会造成ANR?ANR触发机制如何避免ANR?发生ANR异常怎么处理? 首先,什么是ANR? ANR(Application Not responding)&…

27、美国国家冰雪中心(NSIDC)海冰密集度月数据下载与处理

文章目录 一、前言二、数据下载三、使用Ponply查看数据结构四、代码一、前言 处理美国国家冰雪中心(NSIDC)的海冰密集度月度数据时,坐标转换是一个重要的步骤。NSIDC提供的数据通常采用极地球面坐标系,需要将其转换为常用的地理坐标系(如经纬度)以便进行分析和可视化。 坐…

python debug怎么用

1.打开pycharm,新建一个python程序,命名为excel.py。 2.直接贴出代码,如果是hello world就不存调试的问题了! 3.介绍调试的菜单操作,在【菜单栏】选择【RUN】,下拉菜单里选择【debug excel.py】或者【Debug…

【C++】类与对象--初始化列表,类型转换,static,友元

文章目录 前言一、初始化列表1.1 初始化列表概述1.2 初始化列表注意事项初始化列表代码示例 二、类类型转换2.1 类类型转换2.2 代码示例 三.static成员3.1 静态成员变量3.2 代码示例 四.友元4.1友元概述4.2 友元特点4.3 友元代码示例 五.内部类5.1 内部类特点5.2 代码示例 六.匿…

掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了

掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了 艾斯视觉观点认为:在软件开发的世界里,有时候创意和设计的火花会擦得特别亮,以至于让技术实现的伙伴们感到既兴奋又紧张。这不,我们的设计团队刚刚…

利用AI能力实现一个生成掘金、CSDN文章的总结并生成思维脑图

背景 为了快速了解文章重点!! 设计思路 1、根据文章链接、获取文章内容 2、编写 prompt 3、利用 markmap 显示思维导图 实现 获取文章内容 利用爬虫技术,简单利用 axios 获取链接内容,然后通过 cheerio 获取相关元素。 编码…

靶机Metasploitable2的安装

Metasploitable2是一款基于Ubuntu Linux的操作系统。Metasploitable2是一个虚拟机文件,从网上下载解压之后就可以直接使用,无需安装。该系统本身设计作为安全工具测试和演示常见漏洞攻击的靶机,所以它存在大量未打补丁漏洞,并且开…

C语言中的IO控制流

文章目录 一、什么是C语言中的IO控制流二、open函数 1.使用open函数创建文件2.使用使用open函数打开文件三、文件的权限四、文件的描述符五、read函数六、write函数七、lseek函数八、close函数 一、什么是C语言中的IO控制流 在linux系统中一切皆文件,C语言中的IO控…

13.2 MongoDB

13.2 MongoDB 1. 概述2. docker安装3. SpringBoot整合MongoDB3.1 依赖3.2 配置连接1. 基于`yml`配置2. 基于配置类配置3.3 启动项坑1坑23.4 新增业务1. 实体类映射2. 数据层3. 业务层4. 控制层5. 测试结果3.5 单条记录查询业务1. 数据层2. 业务层3. 控制层4. 断点测试3.6 分页查…

【Rust光年纪】极致性能与灵活选择:Rust语言数学优化库详解

Rust语言中的数学优化:六大利器汇总 前言 在当今信息时代,数据处理和数学优化成为了各行各业中不可或缺的重要环节。为了满足对高效、快速计算的需求,Rust语言逐渐成为了许多开发者的首选,因其性能优越、并发安全等特点。本文将…

【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针

目录 常量指针和指向常量的指针有什么区别?1. 指向常量的指针(Pointer to Constant)声明方式:示例:解释: 2. 常量指针(Constant Pointer)声明方式:示例:解释&…

zookeeper子结点方式实现分布式锁(阻塞,非阻塞)

一,阻塞式和非阻塞式 “阻塞”和“非阻塞”只是一个人为的概念,“阻塞”说的是一个线程去尝试获取锁,如果失败,就阻塞在这里,监听到持有锁的线程释放,再次去尝试获取。 而“非阻塞”是我尝试一次失败了&am…

泛域名绑定到wordpress网站二级目录

要将WordPress的泛域名绑定到二级目录&#xff0c;你需要在你的服务器上修改Apache或Nginx配置文件。以下是两种最常见的服务器配置的示例&#xff1a; Apache服务器 编辑你的虚拟主机配置文件&#xff0c;通常位于/etc/apache2/sites-available/目录下。 <VirtualHost *…

2024 暑假友谊赛-热身1

[ABC102D] Equal Cut - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:找在区间[2,n-1]中找到i,j,k三个点,把序列分割成4个区间:[1,i],[i1,j],[j1,k],[k1,n] 暴力的做法是枚举i,j,k加上前缀和是o(n^3)的 key:"考虑枚举处于中间的j&#xff0c;然后用i平衡左两个区间,…

【踩坑系列-JS】iframe中的url参数获取

Author&#xff1a;赵志乾 Date&#xff1a;2024-07-24 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 问题描述 系统A的页面中以iframe的方式嵌入了系统B的页面&#xff0c;并需要将A页面url中的参数传递给B页面。 最初的实现方式是&am…

【es】elasticsearch 自定义排序-按关键字位置排序

一 背景 要求es查询的结果按关键字位置排序&#xff0c;位置越靠前优先级越高。 es版本7.14.0&#xff0c;项目是thrift&#xff0c;也可以平替springboot&#xff0c;使用easyes连接es。 二 easyes使用 配easyes按官方文档就差不多了 排序 | Easy-Es 主要的一个问题是easy…