【100天精通python】Day34:使用python操作数据库_ORM(SQLAlchemy)使用
目录
专栏导读
1 ORM 概述
2 SQLAlchemy 概述
3 ORM:SQLAlchemy使用
3.1 安装SQLAlchemy:
3.2 定义数据库模型类:
3.3 创建数据表:
3.4 插入数据:
3.5 查询数据:
3.6 更新数据:
3.7 删除数据:
3.8 关闭会话:
4 实战
设计一个简单的图书管理系统。
专栏导读
专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html
1 ORM 概述
ORM(对象关系映射)是一种编程技术,用于在关系型数据库和面向对象编程语言之间建立映射关系,使得数据库中的表和记录可以映射到编程语言中的对象和类。ORM的目标是简化数据库操作,使开发人员能够以面向对象的方式处理数据库。
在Python中,有多个ORM库可用,其中最知名的是SQLAlchemy。SQLAlchemy提供了一种将Python对象与数据库表之间建立映射关系的方式,允许开发人员使用Python类来操作数据库。
ORM的优势包括:
抽象化数据库操作:ORM隐藏了底层数据库的细节,开发人员可以更专注于业务逻辑,而不需要编写复杂的SQL查询。
面向对象编程:ORM允许开发人员使用面向对象的方式处理数据,使得代码更加清晰、可维护。
跨数据库支持:ORM库通常提供了跨多种数据库的支持,开发人员可以轻松切换数据库而不需要更改大量代码。
自动建表和迁移:ORM库可以自动根据定义的Python类生成数据库表,并支持数据库迁移。
查询生成器:ORM库通常提供了查询生成器,使得编写查询更加简单和直观。
事务管理:ORM库可以帮助管理事务,确保数据的一致性和完整性。
2 SQLAlchemy 概述
SQLAlchemy是一个强大的Python SQL工具包和对象关系映射(ORM)库,它允许开发人员使用Python编程语言与关系型数据库进行交互。SQLAlchemy提供了一种灵活且强大的方式来执行SQL查询、插入、更新、删除等操作,同时还支持将数据库表映射到Python类,使开发人员可以以面向对象的方式操作数据库。
以下是SQLAlchemy的主要特点和概述:
ORM功能:SQLAlchemy的核心特点之一是其ORM功能。它允许你通过定义Python类来映射数据库表和记录,将数据库操作转化为面向对象的操作,使代码更加直观和易于维护。
多种数据库支持:SQLAlchemy支持多种关系型数据库,包括MySQL、SQLite、PostgreSQL、Oracle等,允许开发人员在不同数据库之间切换而无需更改大部分代码。
灵活性:SQLAlchemy提供了多种方式来执行SQL操作,包括原始SQL查询、查询生成器以及ORM查询。这使得开发人员可以根据需求选择适合的方式。
连接池管理:SQLAlchemy支持连接池管理,可以在应用程序和数据库之间维护一组数据库连接,提高性能和效率。
事务管理:SQLAlchemy允许你使用事务管理来确保数据库操作的一致性和完整性,可以提交、回滚和中断事务。
数据库迁移:SQLAlchemy提供了Alembic工具,用于数据库迁移和版本管理,使得对数据库结构的变更更加可控。
多种关联:SQLAlchemy支持多种关联类型,如一对多、多对多等关联关系,使数据库之间的关系更加清晰。
跨表查询:SQLAlchemy允许在ORM查询中执行跨表联接,从而实现复杂的查询操作。
性能优化:SQLAlchemy提供了各种性能优化选项,如缓存、批量操作等,以提升大规模数据处理的效率。
丰富的文档和社区支持:SQLAlchemy拥有丰富的官方文档和活跃的社区,使得学习和解决问题变得更加容易。
总之,SQLAlchemy是一个强大的Python数据库工具包,适用于各种规模的项目,从小型应用到大型企业级系统。它的灵活性、面向对象的设计和多种功能使得它成为Python开发人员进行数据库操作的首选工具之一。
3 ORM:SQLAlchemy使用
当使用Python中的ORM(例如SQLAlchemy)时,你可以通过创建Python类来定义数据库模型,然后使用这些模型对象来执行数据库操作。以下是使用SQLAlchemy的详细示例:
3.1 安装SQLAlchemy:
首先,你需要安装SQLAlchemy库。你可以使用以下命令在终端中安装它:
pip install sqlalchemy
3.2 定义数据库模型类:
创建一个Python类来定义数据库模型。每个类表示一个表,类的属性表示表的列。
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base# 创建数据库连接
engine = create_engine('sqlite:///example.db')
Base = declarative_base()# 定义模型类
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)
3.3 创建数据表:
通过调用create_all()
方法创建数据库表。
Base.metadata.create_all(engine)
3.4 插入数据:
创建一个模型对象,然后将其添加到会话中并提交。
from sqlalchemy.orm import sessionmaker# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 添加数据
new_user = User(name='Alice', age=25)
session.add(new_user)
session.commit()
3.5 查询数据:
使用会话查询模型对象。
# 查询数据
user = session.query(User).filter_by(name='Alice').first()
if user:print("User found:", user.name, user.age)
else:print("User not found")
3.6 更新数据:
可以更新模型对象的属性,然后提交会话来更新数据库。
user.age = 26
session.commit()
3.7 删除数据:
使用delete()
方法删除模型对象,然后提交会话。
session.delete(user)
session.commit()
3.8 关闭会话:
记得在完成操作后关闭会话。
session.close()
4 实战
设计一个简单的图书管理系统。
以下是一个使用SQLAlchemy的图书管理系统的完整示例:
确保已安装sqlalchemy, pip install sqlalchemy
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base# 创建数据库连接
engine = create_engine('sqlite:///library.db')
Base = declarative_base()# 定义作者模型类
class Author(Base):__tablename__ = 'authors'id = Column(Integer, primary_key=True)name = Column(String)# 定义图书模型类
class Book(Base):__tablename__ = 'books'id = Column(Integer, primary_key=True)title = Column(String)author_id = Column(Integer, ForeignKey('authors.id'))# 创建数据表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 添加作者
author1 = Author(name='J.K. Rowling')
author2 = Author(name='George Orwell')session.add_all([author1, author2])
session.commit()# 添加图书
book1 = Book(title='Harry Potter and the Sorcerer\'s Stone', author_id=author1.id)
book2 = Book(title='1984', author_id=author2.id)session.add_all([book1, book2])
session.commit()# 查询数据
print("Authors:")
authors = session.query(Author).all()
for author in authors:print("Author:", author.name)selected_author = session.query(Author).filter_by(name='J.K. Rowling').first()
if selected_author:print("\nBooks by", selected_author.name)books = session.query(Book).filter_by(author_id=selected_author.id).all()for book in books:print("Book:", book.title)# 关闭会话
session.close()
上述代码示例演示了如何使用SQLAlchemy库创建一个简单的图书管理系统。
导入所需模块:代码开始时导入了所需的SQLAlchemy模块,包括创建引擎、定义模型类、创建数据表和会话等。
创建数据库连接和基类:使用
create_engine
函数创建了SQLite数据库连接,然后通过declarative_base
创建了一个基类Base
。定义模型类:定义了两个模型类,即
Author
(作者)和Book
(图书)。每个类对应一个表,类的属性对应表的列。创建数据表:通过调用
Base.metadata.create_all(engine)
方法,基于模型类创建了数据库中的数据表。创建会话:使用
sessionmaker
创建了一个会话类Session
,然后通过Session()
创建了一个会话实例session
。添加数据:创建了两个作者实例,使用
session.add_all()
将其添加到会话中,并通过session.commit()
提交到数据库。查询数据:使用
session.query()
查询了作者和图书信息,并进行了打印输出。关闭会话:在所有操作完成后,通过
session.close()
关闭了会话,释放资源。总体而言,这个示例展示了如何使用SQLAlchemy来创建数据库模型、执行数据库操作、查询数据以及关闭会话。通过使用ORM,你可以将数据库操作转化为面向对象的方式,使代码更加清晰、可维护。你可以根据需求进一步扩展这个示例,添加更多功能和复杂性。
相关文章:

【100天精通python】Day34:使用python操作数据库_ORM(SQLAlchemy)使用
目录 专栏导读 1 ORM 概述 2 SQLAlchemy 概述 3 ORM:SQLAlchemy使用 3.1 安装SQLAlchemy: 3.2 定义数据库模型类: 3.3 创建数据表: 3.4 插入数据: 3.5 查询数据: 3.6 更新数据: 3.7 删…...

CCLINK IE转MODBUS-TCP网关modbus tcp协议详解
你是否曾经遇到过需要同时处理CCLINK IE FIELD BASIC和MODBUS两种数据协议的情况?捷米的JM-CCLKIE-TCP网关可以帮助你解决这个问题。 捷米JM-CCLKIE-TCP网关可以分别从CCLINK IE FIELD BASIC一侧和MODBUS一侧读写数据,然后将数据存入各自的缓冲区。接着…...
vue2根据不同的电脑分辨率显示页面内容及不同设备适配显示
1.安装插件: npm install postcss-px2rem px2rem-loader --save npm i lib-flexible --save 2.创建flexible.js,并在main.js引用 ;(function(win, lib) {var doc = win.document;var docEl = doc.documentElement;var metaEl = doc.querySelector(meta[name="viewport&…...
概率论:多维随机变量及分布
多维随机变量及分布 X X X为随机变量, ∀ x ∈ R , P { X ≤ x } F ( x ) \forall x\in R,P\{X\le x\}F(x) ∀x∈R,P{X≤x}F(x) 设 F ( x ) F(x) F(x)为 X X X的分布函数,则 (1) 0 ≤ F ( x ) ≤ 1 0\le F(x)\le1 0≤F(x)≤1 &am…...

flutter-第三方组件
卡片折叠 stacked_card_carousel 扫一扫组件 qr_code_scanner 权限处理组件 permission_handler 生成二维码组件 pretty_qr_code 角标组件 badges 动画组件 animations app更新 app_installer 带缓存的图片组件 cached_network_image 密码输入框 collection 图片保存 image_g…...

迪瑞克斯拉算法
迪锐克斯拉算法 简单来说就是在有向图中,给定一个图中具体的出发点,从这个点出发能够到达的所有的点,每个点的最短距离是多少。到不了的点,距离则是正无穷。有向,无负权重,可以有环。 所以说,迪…...

数据结构:力扣OJ题(每日一练)
目录 题一:环形链表 思路一: 题二:复制带随机指针的链表 思路一: 本人实力有限可能对一些地方解释的不够清晰,可以自己尝试读代码,望海涵! 题一:环形链表 给定一个链表的头节点…...

【论文阅读】基于深度学习的时序预测——Informer
系列文章链接 论文一:2020 Informer:长时序数据预测 论文二:2021 Autoformer:长序列数据预测 论文三:2022 FEDformer:长序列数据预测 论文四:2022 Non-Stationary Transformers:非平…...
机器学习 | Python实现GBDT梯度提升树模型设计
机器学习 | Python实现GBDT梯度提升树模型设计 目录 机器学习 | Python实现GBDT梯度提升树模型设计基本介绍模型描述模型使用参考资料基本介绍 机器学习 | Python实现GBDT梯度提升树模型设计。梯度提升树(Grandient Boosting)是提升树(Boosting Tree)的一种改进算法,GBDT也…...

elementUi表单恢复至初始状态并不触发表单验证
elementUi表单恢复至初始状态并不触发表单验证 1.场景再现2.解决方法 1.场景再现 左侧是树形列表,右侧是显示节点的详情,点击按钮应该就是新增一个规则的意思,表单内容是没有改变的,所以就把需要把表单恢复至初始状态并不触发表单…...

大模型相关知识
一. embedding 简单来说,embedding就是用一个低维的向量表示一个物体,可以是一个词,或是一个商品,或是一个电影等等。这个embedding向量的性质是能使距离相近的向量对应的物体有相近的含义,比如 Embedding(复仇者联盟)…...
无法在 macOS Ventura 上启动 Multipass
异常信息 ➜ ~ sudo multipass authenticate Please enter passphrase: authenticate failed: Passphrase is not set. Please multipass set local.passphrase with a trusted client. ➜ ~ multipass set local.passphrase Please enter passphrase: Please re-enter…...

算法通关村第六关——原来如此简单
层次遍历:又叫广度优先遍历。就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,直到访问完二叉树的最后一层。 我们先看一下基础的层次遍历题,力扣102题:给你一个二叉树,请你返…...

企业权限管理(八)-登陆使用数据库认证
Spring Security 使用数据库认证 在 Spring Security 中如果想要使用数据进行认证操作,有很多种操作方式,这里我们介绍使用 UserDetails 、 UserDetailsService来完成操作。 UserDetails public interface UserDetails extends Serializable { Collecti…...

第一百二十五天学习记录:C++提高:STL-deque容器(下)(黑马教学视频)
deque插入和删除 功能描述: 向deque容器中插入和删除数据 函数原型: 两端插入操作: push_back(elem); //在容器尾部添加一个数据 push_front(elem); //在容器头部插入一个数据 pop_back(); //删除容器最后一个数据 pop_front(); //删除容器…...

案例12 Spring MVC入门案例
网页输入http://localhost:8080/hello,浏览器展示“Hello Spring MVC”。 1. 创建项目 选择Maven快速构建web项目,项目名称为case12-springmvc01。 2.配置Maven依赖 <?xml version"1.0" encoding"UTF-8"?><project xm…...
【React】精选10题
1.React Hooks带来了什么便利? React Hooks是React16.8版本中引入的新特性,它带来了许多便利。 更简单的状态管理 使用useState Hook可以在函数组件中方便地管理状态,避免了使用类组件时需要继承React.Component的繁琐操作。 避免使用类组件…...
VS Spy++进程信息获取
查看进程中窗口信息。 Spy使用介绍 Windows下的程序及热键监视神器——Spy Word进程获取...

Java课题笔记~ SpringMVC概述
1.1 SpringMVC简介 SpringMVC 也叫Spring web mvc。是Spring 框架的一部分,在Spring3.0 后发布的。 1.2 SpringMVC的优点 基于MVC 架构 基于 MVC 架构,功能分工明确。解耦合。 容易理解,上手快,使用简单 就可以开发一个注解…...

SOPC之NIOS Ⅱ遇到的问题
记录NIOS Ⅱ中遇到的报错 一、NIOS II中Eclipse头文件未找到 问题:Unresolved inclusion: "system.h"等 原因:编译器无法找到头文件所在路径 解决方法: 在文件夹中找到要添加的头文件,并记录下其路径,如…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...