使用SQLAlchemy库进行数据库操作的基本流程[简单示例]

SQLAlchemy ORM(Object-Relational Mapping)是 SQLAlchemy 库的一部分,它允许开发者通过对象的方式来操作数据库,而不需要直接编写 SQL 语句。ORM 将数据库中的表映射为 Python 类,表中的每一行数据则映射为相应类的对象,这样开发者就可以使用面向对象的方式来进行数据库操作。

这段代码展示了使用SQLAlchemy库进行数据库操作的基本流程。下面是其中用到的方法和功能的详细介绍:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base,sessionmaker# 设置数据库连接字符串
conn_str = 'sqlite:///examplesqlalchemy.db'# 创建数据库引擎
engine = create_engine(conn_str)# 创建基类
Base = declarative_base()# 定义用户表
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)username = Column(String(50), unique=True, nullable=False)email = Column(String(100), nullable=False)# 创建数据库表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 插入数据
new_user = User(username='john_doe', email='john@example.com')
session.add(new_user)
session.commit()# 查询数据
users = session.query(User).all()
for user in users:print(user.username, user.email)# 更新数据
user = session.query(User).filter_by(username='john_doe').first()
user.email = 'john_updated@example.com'
session.commit()# 删除数据
user = session.query(User).filter_by(username='john_doe').first()
session.delete(user)
session.commit()# 关闭会话
session.close()
  1. create_engine

    • create_engine 方法用于创建一个数据库引擎,它接受一个连接字符串作为参数,指定要连接的数据库的类型和位置。在这个例子中,我们使用 SQLite 数据库,连接字符串是 'sqlite:///examplesqlalchemy.db'。
  2. declarative_base

    • declarative_base 是一个基类工厂函数,它创建一个新的基类,所有的数据模型类都应该继承自这个基类。这样可以使得数据模型类和表格之间建立起关联。
  3. Column

    • Column 是用于定义表格列的类,它接受不同的参数来指定列的属性,例如数据类型、是否是主键、是否唯一等。在这个例子中,我们定义了整型的 id 列和两个字符串类型的列 username 和 email
  4. Base.metadata.create_all(engine)

    • 这行代码通过 Base.metadata.create_all(engine) 创建所有已定义的数据模型类对应的表格结构。它会根据数据模型类中的定义自动生成对应的数据库表格。
  5. sessionmaker(bind=engine)

    • sessionmaker 是一个用于创建数据库会话的类工厂函数,它接受一个绑定的数据库引擎作为参数,用于实例化会话对象。在这个例子中,我们将数据库引擎 engine 绑定到会话生成器上。
  6. session.add(new_user)session.commit()

    • session.add(new_user) 将新创建的 User 对象添加到当前会话中,而 session.commit() 则提交当前会话的所有更改,包括插入操作,将其持久化到数据库中。
  7. session.query(User).all()

    • session.query(User) 是用于创建查询的方法,这里我们查询 User 表中的所有记录。.all() 方法返回查询结果的列表。
  8. session.query(User).filter_by(username='john_doe').first()

    • 这行代码演示了如何使用 filter_by 进行过滤查询,查找 username 为 'john_doe' 的记录,并返回第一条符合条件的记录。
  9. session.delete(user)

    • session.delete(user) 用于从数据库中删除指定的对象,这里我们删除了之前查询到的 user 对象。
  10. session.close()

    • 最后,session.close() 方法关闭了当前会话,释放了数据库连接资源。

------------------

    创建一个简单的 SQLAlchemy ORM 模型,假设我们要创建一个学生信息管理系统,包含学生和课程两个数据表。每个学生可以选择多门课程,而每门课程也可以被多个学生选择。
    定义了三个 ORM 模型类:StudentCourseStudentCourse,分别对应了学生、课程和学生与课程之间的关联表。relationship 方法用于定义类之间的关系,secondary 参数指定了关联表,back_populates 参数表示了双向关系。

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import declarative_base,sessionmaker# 创建数据库引擎
engine = create_engine('sqlite:///students.db', echo=True)# 声明基类
Base = declarative_base()# 定义学生模型
class Student(Base):__tablename__ = 'students'id = Column(Integer, primary_key=True)name = Column(String)courses = relationship('Course', secondary='student_courses', back_populates='students')# 定义课程模型
class Course(Base):__tablename__ = 'courses'id = Column(Integer, primary_key=True)name = Column(String)students = relationship('Student', secondary='student_courses', back_populates='courses')# 定义学生和课程之间的关联表
class StudentCourse(Base):__tablename__ = 'student_courses'student_id = Column(Integer, ForeignKey('students.id'), primary_key=True)course_id = Column(Integer, ForeignKey('courses.id'), primary_key=True)# 创建数据表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 关闭会话
session.close()

ForeignKey 是 SQLAlchemy 中用于定义外键约束的一个类。外键约束用于指定一个列或一组列与另一个表的列之间的关系。在关系型数据库中,外键约束可以确保两个表之间的数据一致性,并且可以建立表之间的关联关系。

*************************

SQLAlchemy 是一个用于 Python 编程语言的 SQL 工具包和对象关系映射(ORM)工具。它允许开发人员使用 Python 语言来管理数据库,通过提供高级的抽象接口,使得操作数据库变得更加简单和高效。以下是 SQLAlchemy 的一些主要特点和功能:

  1. 对象关系映射(ORM)

    • SQLAlchemy 提供了 ORM 功能,可以将数据库表格映射到 Python 对象上,使得开发人员可以直接使用对象来表示和操作数据库中的数据,而不必编写复杂的 SQL 查询语句。
  2. 数据库引擎和连接池

    • SQLAlchemy 提供了数据库引擎和连接池的抽象层,支持多种数据库后端,并且能够有效地管理数据库连接,提高数据库操作的性能和效率。
  3. SQL 表达式语言

    • SQLAlchemy 提供了一种 SQL 表达式语言,可以使用 Python 对象来构建 SQL 查询语句,而不必直接编写原始的 SQL 语句,这样做既方便又安全。
  4. 事务管理

    • SQLAlchemy 支持事务管理,开发人员可以通过会话(Session)来管理数据库操作的事务,确保数据的完整性和一致性。
  5. 查询构建器

    • SQLAlchemy 提供了灵活的查询构建器,开发人员可以使用各种方法来构建复杂的数据库查询,包括过滤、排序、连接等操作,从而实现灵活的数据检索功能。
  6. 自动数据表创建

    • 使用 SQLAlchemy,开发人员可以通过定义 Python 类来表示数据表结构,然后通过调用 create_all() 方法来自动生成对应的数据库表格结构,简化了数据库的初始化过程。
  7. 跨数据库兼容性

    • SQLAlchemy 支持多种数据库后端,包括 MySQL、PostgreSQL、SQLite 等,使得开发人员可以在不同的数据库系统之间无缝切换,而不必修改大量代码。

****************************

SQLAlchemy 2.0 是一个重大更新,引入了许多新功能和更改。以下是 SQLAlchemy 2.0 的一些关键更新:

  1. Async Support: SQLAlchemy 2.0 添加了对异步编程的支持,包括 asyncio 和 trio 库。
  2. New DeclarativeBase API: 在 SQLAlchemy 2.0 中,declarative_base 已被弃用,取而代之的是 DeclarativeBase
  3. New Session API: SQLAlchemy 2.0 中的 sessionmaker 已被弃用,取而代之的是 Session 上下文管理器
  4. Improved Type Hints: SQLAlchemy 2.0 提供了更好的类型提示,支持 PEP-484 类型提示。
  5. New InsertManyValues: SQLAlchemy 2.0 引入了 InsertManyValues 以支持高效的批量插入。
  6. New Select and Update Objects: SQLAlchemy 2.0 引入了新的 Select 和 Update 对象,提供了更好的可读性和更多选项。
  7. Improved Column and Relationship: SQLAlchemy 2.0 中的 Column 和 Relationship 对象已经得到了改进,提供了更好的可读性和更多选项。
  8. 更多的测试和文档: SQLAlchemy 2.0 包括更多的测试和文档,以确保更好的稳定性和兼容性。

当使用 SQLAlchemy 2.0 时,请务必查看 SQLAlchemy 2.0 文档,了解新功能和更改。

以下是一个使用 SQLAlchemy 2.0 版本的示例,其中包括一个简单的 ORM 模型和一个添加新用户的函数。

# your_module.py
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import DeclarativeBase, Session
from sqlalchemy import create_engineclass Base(DeclarativeBase):passclass User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50), nullable=False)email = Column(String(120), unique=True, nullable=False)def add_new_user(name, email):engine = create_engine('your_database_connection_string')Base.metadata.create_all(engine)with Session(engine) as session:new_user = User(name=name, email=email)session.add(new_user)session.commit()# Add a new user
add_new_user('John Doe', 'john.doe@example.com')

在这个示例中,我们创建了一个名为 User 的 SQLAlchemy ORM 模型,并定义了一个名为 add_new_user 的函数,用于向数据库添加新用户。请记得根据实际情况更新 your_database_connection_string 的值。这个示例使用 SQLAlchemy 2.0 版本,其中对 create_engine 和 sessionmaker 进行了更新。现在,我们使用 Session 上下文管理器来处理会话。

 *******************

SQLAlchemy 2.0 是一个强大的Python ORM(对象关系映射)工具,它使得在Python应用程序中与关系数据库进行交互变得更加容易。以下是SQLAlchemy 2.0的一些关键知识点:

1. **ORM和Core**:SQLAlchemy 2.0 包括两个主要部分:ORM(对象关系映射器)和Core(SQL构造器和执行器)。ORM允许将Python类映射到数据库表,并提供了一种使用Python对象而不是手写SQL语句来查询数据库的方法。Core提供了一个底层的API,用于构造和执行SQL语句。
2. **类型支持**:SQLAlchemy 2.0 深入集成了PEP 484类型实践,这意味着您可以使用Python类型直接在ORM和Core中指定列和表达式。这有助于提高代码的可读性和可维护性,并使得IDE和静态分析工具能够更好地理解代码。
3. **SQL表达式 Typing**:SQL表达式、语句和结果集现在有着显式的Typing,该Typing扩展到ORM映射。这允许更好的类型检查和IDE支持。
4. **ORM声明模型**:SQLAlchemy 2.0 引入了新的类型感知语法,用于ORM声明模型。这允许更准确的Typing行为,从语句到结果集的属性。
5. **迁移指南**:如果您正在从SQLAlchemy 1.x系列更新,请务必通过迁移指南确保SQLAlchemy 2.0兼容性。
6. **连接和会话**:在SQLAlchemy中,连接和会话是数据库交互的关键抽象概念。连接代表数据库会话,而会话代表应用程序与数据库的交互。
7. **映射**:映射是将Python类与数据库表相关联的过程。映射允许您使用Python对象而不是手写SQL语句来查询数据库。
8. **查询**:SQLAlchemy 2.0 提供了多种查询数据库的方法。您可以使用ORM查询API或Core查询API。ORM查询API允许您使用Python对象查询数据库,而Core查询API允许您手写SQL语句。
9. **事务**:SQLAlchemy 2.0 支持事务,这意味着您可以在数据库交互中使用事务来确保数据的一致性。
10. **表达式语言**:SQLAlchemy 2.0 提供了一个强大的表达式语言,用于构造SQL语句。表达式语言允许您使用Python代码构造SQL语句,而不是手写SQL语句。

这些知识点是SQLAlchemy 2.0的一个基本概述,如果您需要更详细的信息,请参考[官方SQLAlchemy 2.0文档](https://docs.sqlalchemy.org/en/20/changelog/whatsnew_20.html)。

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

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

相关文章

solr functionquery函数查询自定义函数实现

Solr是一个开源的搜索平台,基于Apache Lucene库构建,主要用于提供全文搜索的功能。它被设计为一个高度可靠、可扩展的搜索应用服务器。以下是Solr的一些主要使用场景: 全文搜索:Solr最核心的功能是提供全文搜索,它可以…

2.6 IDE(集成开发环境)是什么

IDE(集成开发环境)是什么 IDE 是 Integrated Development Environment 的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件,是它们的一个总称。 通过前面章节的学习我们知道,运行 C 语言&…

eclipse导入svn项目

1、配置maven 2、用svn引入项目 3一直点击next,到最后选完成。

基于springboot的房屋租赁管理系统+数据库+免费远程调试

项目介绍: 基于springboot的房屋租赁管理系统。Javaee项目,springboot项目,采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringBoot JspMaven来实现。MyS…

Qt_day4:2024/3/25

作业1: 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和…

关于docker-Engine使用的存储驱动devicemapper的常识

缘起: 今天值班的兄弟找我说PAAS节点扩容后有个 docker-container 创建一直失败,看不懂输出的报文信息。 看值班给出的投屏发现和storage-driver有关,提示信息如下: Error running DeviceCreate (createSnapDevice) dm_task_ru…

STM32IAP技术

STM32IAP技术 内存 1、程序存储在0x0800 0000。 2、程序从0x0000 0000开始执行。 3、0x0000 0000和0x0800 0000 相互映射。 4、厂商自带的Bootloader存在系统存储区。地址为0x1FFF F000 5、不同容量单片机闪存大小不同,对于主存储闪存容量不多于512KB的GD32F30x_C…

MongoDB聚合运算符:$isArray

文章目录 语法使用举例 $isArray聚合运算符返回操作数是否是一个数组&#xff0c;返回一个布尔值。 语法 { $isArray: [ <expression> ] }使用 <expression>为任何类型的表达式&#xff0c;举例说明&#xff1a; 举例结果说明{ $isArray: "hello" }f…

【iOS ARKit】播放3D音频

3D音频 在前面系列中&#xff0c;我们了解如何定位追踪用户&#xff08;实际是定位用户的移动设备&#xff09;的位置与方向&#xff0c;然后通过摄像机的投影矩阵将虚拟物体投影到用户移动设备屏幕。如果用户移动了&#xff0c;则通过VIO 和 IMU更新用户的位置与方向信息&…

钡铼技术R40路由器助力构建无人值守的智能化污水处理厂

钡铼技术R40路由器作为智能化污水处理厂的关键网络设备&#xff0c;发挥着至关重要的作用&#xff0c;助力构建无人值守的智能化污水处理系统。在现代社会&#xff0c;污水处理是城市环境保护和可持续发展的重要组成部分&#xff0c;而智能化污水处理厂借助先进的技术和设备&am…

后端常问面经之Java基础

基本数据类型 Java中有8种基本数据类型&#xff1a; 6种数字类型&#xff1a; 4种整数型&#xff1a;byte、short、int、long 2种浮点型&#xff1a;float、double 1种字符类型&#xff1a;char 1种布尔类型&#xff1a;boolean 数据类型的默认值以及所占空间如下&#x…

由浅到深认识Java语言(25):正则表达式

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

docker简单使用1

docker简单使用1 1. 执行dockerfile 1. 执行dockerfile 要执行 Docker 脚本&#xff0c;首先需要确保你已经安装了 Docker 并且启动了 Docker 服务。接下来&#xff0c;按照以下步骤执行 Docker 脚本&#xff1a; 将 Docker 脚本保存为一个名为 Dockerfile 的文本文件&#xf…

2024 Python3.10 系统入门+进阶(三):Python变量类型和运算符

目录 一、Python变量的定义和使用二、Python整数类型&#xff08;int&#xff09;详解三、Python小数/浮点数&#xff08;float&#xff09;类型详解四、Python复数类型(complex)详解---了解五、Python字符串详解(包含长字符串和原始字符串)5.1 处理字符串中的引号5.2 字符串的…

后端常见面经之JVM

JVM组成 有垃圾回收的是哪些地方&#xff1f; 垃圾回收主要是针对堆内存中的对象进行的&#xff0c;包括以下几个方面&#xff1a; 堆内存&#xff1a;垃圾回收主要针对堆内存中不再被引用的对象进行回收&#xff0c;包括新生代和老年代中的对象。 永久代/元空间&#xff1a…

Selenium 自动化 —— 切换浏览器窗口

更多内容请关注我的 Selenium 自动化 专栏&#xff1a; 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码浏览器窗口操作 平时我们在使用浏览器时&#xff0c;通常会打开多个窗口&#xff0c;然后再多个窗口中来回切换&#xf…

众邦科技CRMEB商城商业版任意文件写入getshell 0day

代码审计 接口&#xff1a;/adminapi/system/crud 处理的代码如下 public function save(SystemCrudDataService $service, $id 0){$data $this->request->postMore([[pid, 0],//上级菜单id[menuName, ],//菜单名[tableName, ],//表名[modelName, ],//模块名称[table…

手机网页视频无水印采集工具|抖音视频关键词批量下载软件

轻松获取手机网页视频无水印的神器&#xff01;让您随心所欲畅享精彩视频内容&#xff01; 随着网络视频的盛行&#xff0c;如何方便快捷地获取您感兴趣的视频内容成为一大需求。现推出一款手机网页视频无水印采集工具&#xff0c;功能强大&#xff0c;操作简便&#xff0c;助您…

[项目前置]如何用webbench进行压力测试

测试软件 采用webbench进行服务器性能测试。 Webbench是知名的网站压力测试工具&#xff0c;它是由Lionbridge公司开发。 webbench的标准测试可以向我们展示服务器的两项内容&#xff1a; 每秒钟相应请求数 和 每秒钟传输数据量 webbench测试原理是&#xff0c;创建指定数…

03-CSS盒模型(padding、margin、opactiy、cursor、display、css3前缀)

一、CSS盒模型 CSS 盒模型规定了处理元素内容、内边距、边框 和 外边距 的方式。最内部分是元素内容&#xff0c;直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距。 1.元素的尺寸: height 设置元素的高度。属性值&#xff1a;auto&am…