当前位置: 首页 > news >正文

【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的优势包括:

  1. 抽象化数据库操作:ORM隐藏了底层数据库的细节,开发人员可以更专注于业务逻辑,而不需要编写复杂的SQL查询。

  2. 面向对象编程:ORM允许开发人员使用面向对象的方式处理数据,使得代码更加清晰、可维护。

  3. 跨数据库支持:ORM库通常提供了跨多种数据库的支持,开发人员可以轻松切换数据库而不需要更改大量代码。

  4. 自动建表和迁移:ORM库可以自动根据定义的Python类生成数据库表,并支持数据库迁移。

  5. 查询生成器:ORM库通常提供了查询生成器,使得编写查询更加简单和直观。

  6. 事务管理:ORM库可以帮助管理事务,确保数据的一致性和完整性。

2 SQLAlchemy 概述

        SQLAlchemy是一个强大的Python SQL工具包和对象关系映射(ORM)库,它允许开发人员使用Python编程语言与关系型数据库进行交互。SQLAlchemy提供了一种灵活且强大的方式来执行SQL查询、插入、更新、删除等操作,同时还支持将数据库表映射到Python类,使开发人员可以以面向对象的方式操作数据库。

以下是SQLAlchemy的主要特点和概述:

  1. ORM功能:SQLAlchemy的核心特点之一是其ORM功能。它允许你通过定义Python类来映射数据库表和记录,将数据库操作转化为面向对象的操作,使代码更加直观和易于维护。

  2. 多种数据库支持:SQLAlchemy支持多种关系型数据库,包括MySQL、SQLite、PostgreSQL、Oracle等,允许开发人员在不同数据库之间切换而无需更改大部分代码。

  3. 灵活性:SQLAlchemy提供了多种方式来执行SQL操作,包括原始SQL查询、查询生成器以及ORM查询。这使得开发人员可以根据需求选择适合的方式。

  4. 连接池管理:SQLAlchemy支持连接池管理,可以在应用程序和数据库之间维护一组数据库连接,提高性能和效率。

  5. 事务管理:SQLAlchemy允许你使用事务管理来确保数据库操作的一致性和完整性,可以提交、回滚和中断事务。

  6. 数据库迁移:SQLAlchemy提供了Alembic工具,用于数据库迁移和版本管理,使得对数据库结构的变更更加可控。

  7. 多种关联:SQLAlchemy支持多种关联类型,如一对多、多对多等关联关系,使数据库之间的关系更加清晰。

  8. 跨表查询:SQLAlchemy允许在ORM查询中执行跨表联接,从而实现复杂的查询操作。

  9. 性能优化:SQLAlchemy提供了各种性能优化选项,如缓存、批量操作等,以提升大规模数据处理的效率。

  10. 丰富的文档和社区支持: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库创建一个简单的图书管理系统。

  1. 导入所需模块:代码开始时导入了所需的SQLAlchemy模块,包括创建引擎、定义模型类、创建数据表和会话等。

  2. 创建数据库连接和基类:使用create_engine函数创建了SQLite数据库连接,然后通过declarative_base创建了一个基类Base

  3. 定义模型类:定义了两个模型类,即Author(作者)和Book(图书)。每个类对应一个表,类的属性对应表的列。

  4. 创建数据表:通过调用Base.metadata.create_all(engine)方法,基于模型类创建了数据库中的数据表。

  5. 创建会话:使用sessionmaker创建了一个会话类Session,然后通过Session()创建了一个会话实例session

  6. 添加数据:创建了两个作者实例,使用session.add_all()将其添加到会话中,并通过session.commit()提交到数据库。

  7. 查询数据:使用session.query()查询了作者和图书信息,并进行了打印输出。

  8. 关闭会话:在所有操作完成后,通过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&#xff0c;浏览器展示“Hello Spring MVC”。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case12-springmvc01。 2.配置Maven依赖 <?xml version"1.0" encoding"UTF-8"?><project xm…...

【React】精选10题

1.React Hooks带来了什么便利&#xff1f; React Hooks是React16.8版本中引入的新特性&#xff0c;它带来了许多便利。 更简单的状态管理 使用useState Hook可以在函数组件中方便地管理状态&#xff0c;避免了使用类组件时需要继承React.Component的繁琐操作。 避免使用类组件…...

VS Spy++进程信息获取

查看进程中窗口信息。 Spy使用介绍 Windows下的程序及热键监视神器——Spy Word进程获取...

Java课题笔记~ SpringMVC概述

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

SOPC之NIOS Ⅱ遇到的问题

记录NIOS Ⅱ中遇到的报错 一、NIOS II中Eclipse头文件未找到 问题&#xff1a;Unresolved inclusion: "system.h"等 原因&#xff1a;编译器无法找到头文件所在路径 解决方法&#xff1a; 在文件夹中找到要添加的头文件&#xff0c;并记录下其路径&#xff0c;如…...

小白也能懂!Agent如何“看见”并操作电脑?收藏这份操作指南

本文深入浅出地解析了Agent操作电脑的原理&#xff0c;核心在于将电脑界面转化为可观察的输入&#xff0c;通过点击、输入等工具执行“观察—决策—执行—再观察”的循环任务。文章拆解了Agent如何“看见”屏幕、将目标转化为具体动作、执行动作并判断结果等关键问题&#xff0…...

Plant Simulation数字孪生实战:从零搭建生产车间模型(附SimTalk脚本示例)

Plant Simulation数字孪生实战&#xff1a;从零搭建生产车间模型&#xff08;附SimTalk脚本示例&#xff09; 在工业4.0的浪潮中&#xff0c;数字孪生技术正成为制造业转型升级的核心驱动力。作为西门子Tecnomatix产品线中的重要组成部分&#xff0c;Plant Simulation以其强大的…...

前端表格控件SpreadJS在制造执行系统MES开发的具体应用

在很多制造企业推进MES的过程中&#xff0c;常常会遇到一个非常现实的问题&#xff1a; 系统上线了&#xff0c;流程也搭好了&#xff0c;但一到生产现场&#xff0c;员工还是习惯先用 Excel 填数据&#xff0c;再上传系统&#xff0c;或者通过纸质表单记录后由文员二次录入。…...

基于 SpringBoot 的生活信息分享平台,从 0 到 1 完整实现(附源码 + 数据库)

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

# 英伟达AI实验室财经分析报告(2026)

2026财年整体业绩 总营收&#xff1a;2159.38亿美元&#xff0c;同比增长65% 净利润&#xff1a;1200.67亿美元&#xff0c;同比增长65%&#xff0c;日均净赚约3.3亿美元 毛利率&#xff1a;稳定在75%的行业天花板水平&#xff0c;非GAAP毛利率达75.2% 市值&#xff1a;截至202…...

5个Python生物信息学实战技巧:从数据处理到机器学习完整指南

5个Python生物信息学实战技巧&#xff1a;从数据处理到机器学习完整指南 【免费下载链接】Bioinformatics-with-Python-Cookbook-Second-Edition 项目地址: https://gitcode.com/gh_mirrors/bi/Bioinformatics-with-Python-Cookbook-Second-Edition Python生物信息学是…...

HarvestText实体发现:无监督方法识别领域特定实体的终极指南 [特殊字符]

HarvestText实体发现&#xff1a;无监督方法识别领域特定实体的终极指南 &#x1f680; 【免费下载链接】HarvestText 文本挖掘和预处理工具&#xff08;文本清洗、新词发现、情感分析、实体识别链接、关键词抽取、知识抽取、句法分析等&#xff09;&#xff0c;无监督或弱监督…...

macOS微信防撤回终极指南:如何永久保存重要聊天记录

macOS微信防撤回终极指南&#xff1a;如何永久保存重要聊天记录 【免费下载链接】WeChatIntercept 微信防撤回插件&#xff0c;一键安装&#xff0c;仅MAC可用&#xff0c;支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 你是否曾经因为错…...

日期字段不连续,还能正确计算同环比吗?

——PowerBI、Datafor、FineBI三大平台专业对比分析 数据分析在企业经营、决策制定中扮演着越来越核心的角色。环比、同比是数据分析中最常见的两个指标&#xff0c;能清晰表现业务的发展趋势。然而&#xff0c;现实业务数据中&#xff0c;日期字段不连续&#xff08;如自然日…...

【Prometheus】实战指南:使用basic_auth加固监控数据访问

1. 为什么需要为Prometheus添加basic_auth认证 最近几年&#xff0c;随着企业数字化转型的加速&#xff0c;监控系统已经成为IT基础设施中不可或缺的一部分。Prometheus作为云原生时代最流行的监控解决方案之一&#xff0c;被广泛应用于各类生产环境。但很多团队在部署Promethe…...