【100天精通python】Day34:使用python操作数据库_ORM(SQLAlchemy)使用

news2024/12/23 11:39:47

目录

 专栏导读 

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,你可以将数据库操作转化为面向对象的方式,使代码更加清晰、可维护。你可以根据需求进一步扩展这个示例,添加更多功能和复杂性。

 

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

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

相关文章

24届最新计算机毕业设计选题推荐 -计算机专业毕业设计题目参考大全

大家好,我们是竹林可以(计算机毕ye设ji代做团队),大四的同学马上要开始毕业设计开题啦,大家要好好准备哦。 学长学姐们给大家详细整理了计算机毕设最新选题,我们专注毕ye设ji多年,积累了丰富的…

【设计模式——学习笔记】23种设计模式——状态模式State(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入介绍基本介绍登场角色应用场景 案例实现案例一类图实现 案例二:借贷平台源码剖析传统方式实现分析状态修改流程类图实现 案例三:金库警报系统系统的运行逻辑伪代码传统实现方式使用状态模式 类图实现分析问题问题一问题二 总结文章说明…

element-ui的el-dialog,简单的封装。

el-dialog是使用率很高的组件 使用el-dialog很多都是按照文档的例子,用一个变量控制是否显示,再来一个变量控制标题。 如果我这个对话框多个地方使用的话还要创建多个变量,甚至关闭之后还要清空一些变量,应该可以简化一点。我写…

数据结构:力扣OJ题(每日一练)

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

奥威BI数据可视化工具:报表就是平台,随时自助分析

别的数据可视化工具,报表就只是报表,而奥威BI数据可视化工具,一张报表就约等于一个平台,可随时展开多维动态自助分析,按需分析,立得数据信息。 奥威BI是一款多维立体分析数据的数据可视化工具。它可以帮助…

Camtasia2023最新专业的电脑屏幕录制和视频剪辑软件

Camtasia专业的屏幕录制和视频剪辑软件3000多万专业人士在全球范围内使用Camtasia展示产品,教授课程,培训他人,以更快的速度和更吸引人的方式进行沟通和屏幕分享。使您在Windows和!Camtasia是一款功能强大的屏幕录制和视频编辑软件…

办理流量卡也是有条件的,这五种情况就不能办理流量卡!

流量卡资费虽然便宜,但也不是谁都可以办得,以下这几种情况是办不了的! 看到网上的流量卡资费便宜,也想随手申请一张,别想得太简单了,流量卡也不是那么好办理的,换句话来讲,办理流量…

【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代下的Java"拯救者" 在云原生时代,其实Java程序是有很大的劣势的,以最流行的spring boot/spring cloud微服务框架为例,启动一个已经优化好,很多bean需要lazy load的application至少需要3-4秒时间,内…

Chrome小技巧---多用户登录同一网站不串信息

测试中经常需要用到浏览器需要登录多个账号 但是有一个问题就是会串号 通过添加不同的用户再用这用户登录,就不串号了: 还可以在浏览器的偏好设置中添加启动地址 这样每次打开,就进到设置的地址中了

如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库

数据库操作一直是一个比较敏感的话题,动不动“删库跑路”,可见数据库操作对于一个项目而言是非常重要的,我们有时候会因为一个游戏的严重bug或者运营故障要回档数据库,而你们刚好使用的是阿里云的Mongodb,那么这篇文章…

用ThreadLocal做链路追踪(演变升级版)

前言 1、ThreadLocal是线程变量,线程之间彼此隔离,天生线程安全。因为它是跟着线程走的,考虑到这点,它很适合做链路追踪(TraceId) 2、当我们写的接口接收到其它地方(可能是前端、也可能是其它服…

python如何开发一个电商进销存管理系统?

让我们来看一下题主的需求: 管理公司的淘宝天猫平台,后端仓库,采购进行数据同步。其中最主要的还是要对接淘宝API ,实现实时订单的通知,同步淘宝订单,管理买家信息,发货,财务统计等…

亚马逊举报差评有什么作用?有没有可以举报差评的软件?

在亚马逊上举报差评具有以下作用: 1、维护信誉和公平性: 举报差评有助于维护亚马逊市场的信誉和公平性。虚假或不当的差评可能会误导其他消费者,影响他们做出购买决策。通过举报这些问题,可以确保评价体现真实的用户体验&#xf…

【SpringCloud技术专题】「Resilience4j入门指南」(1)轻量级熔断框架的入门指南

基础介绍 Resilience4j是一款轻量级,易于使用的容错库,其灵感来自于Netflix Hystrix,但是专为Java 8和函数式编程而设计。轻量级,因为库只使用了Vavr,它没有任何其他外部依赖下。相比之下,Netflix Hystrix…

Beats:使用 Filebeat 将 golang 应用程序记录到 Elasticsearch - 8.x

毫无疑问,日志记录是任何应用程序最重要的方面之一。 当事情出错时(而且确实会出错),我们需要知道发生了什么。 为了实现这一目标,我们可以设置 Filebeat 从我们的 golang 应用程序收集日志,然后将它们发送…

大数据培训前景怎么样?企业需求量大吗

大数据行业对大家来说并不陌生,大数据行业市场人才需求量大,越早入行越有优势,发展机会和上升空间等大。不少人通过大数据培训来提升自己的经验和自身技术能力,以此来获得更好的就业机会。 2023大数据培训就业前景怎么样呢?企业需…

落地大模型应知必会(3): 如何构建多任务的LLM应用

编者按:今年以来,大语言模型(LLM)已被广泛应用于各种自然语言处理任务,也越来越多地被用于构建复杂的语言应用。但是构建多任务的 LLM 应用仍面临一定的挑战,需要解决任务组合和调控等问题。 本文内容介绍了构建多任务 LLM 应用可…

win10中Docker安装、构建镜像、创建容器、Vscode连接实例

Docker方便一键构建项目所需的运行环境:首先构建镜像(Image)。然后镜像实例化成为容器(Container),构成项目的运行环境。最后Vscode连接容器,方便我们在本地进行开发。下面以一个简单的例子介绍在win10中实现:Docker安装、构建镜像…

STM32--TIM定时器(2)

文章目录 输出比较PWM输出比较通道参数计算舵机简介直流电机简介TB6612 PWM基本结构PWM驱动呼吸灯PWM驱动舵机PWM控制电机 输出比较 输出比较,简称OC(Output Compare)。 输出比较的原理是,当定时器计数值与比较值相等或者满足某种…

【计算机视觉|生成对抗】改进的生成对抗网络(GANs)训练技术

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Improved Techniques for Training GANs 链接:[1606.03498v1] Improved Techniques for Training GANs (arxiv.org) 摘要 本文介绍了一系列应用于生成对抗网络(G…