SQLAlchemy:原理与使用详解

文章目录

    • 引言
    • SQLAlchemy的原理
      • 1. 对象关系映射(ORM)
      • 2. 引擎、会话和元数据
      • 3. 查询构造
    • SQLAlchemy的使用
      • 1. 安装SQLAlchemy
      • 2. 创建数据库连接和引擎
      • 3. 定义模型
      • 4. 创建表
      • 5. 操作数据库
      • 6. 关闭会话
    • 结论

引言

在Python编程环境中,数据库操作是数据处理和分析中不可或缺的一部分。SQLAlchemy是一个强大的SQL工具包和对象关系映射(ORM)系统,它为应用程序开发者提供了SQL的全部功能和灵活性,同时提供了Python的简洁性和易用性。本文将介绍SQLAlchemy的基本原理和基本使用方法。

SQLAlchemy的原理

1. 对象关系映射(ORM)

SQLAlchemy的核心是对象关系映射(ORM)。ORM允许开发者将数据库中的表映射为Python中的类,将表中的行映射为类的实例,将列映射为类的属性。通过ORM,开发者可以使用Python的面向对象编程范式来操作数据库,而无需编写复杂的SQL语句。

2. 引擎、会话和元数据

  • 引擎(Engine):负责连接数据库,并执行原生的SQL语句。
  • 会话(Session):是SQLAlchemy中非常重要的一个组件,它提供了与数据库交互的接口。会话负责创建、查询、更新和删除数据库中的记录,同时管理这些操作的上下文和事务。
  • 元数据(Metadata):用于描述数据库的结构,包括表、列、关系等。SQLAlchemy通过元数据来构建数据库模型,并将这些模型映射到Python的类中。

3. 查询构造

SQLAlchemy提供了丰富的API来构建查询。开发者可以使用这些API来构建复杂的查询语句,包括过滤、排序、分组、连接等操作。SQLAlchemy还支持链式调用和惰性加载,使得查询构造更加灵活和高效。

SQLAlchemy的使用

1. 安装SQLAlchemy

使用pip安装SQLAlchemy:

pip install SQLAlchemy

2. 创建数据库连接和引擎

首先,你需要创建一个数据库连接,并使用这个连接来创建一个引擎。引擎是SQLAlchemy的核心组件,它负责执行SQL语句并与数据库进行交互。

from sqlalchemy import create_engine# 假设你正在使用SQLite数据库,并且数据库文件名为example.db
engine = create_engine('sqlite:///example.db')

3. 定义模型

接下来,你需要定义数据库模型。这些模型通常是一些Python类,它们继承自SQLAlchemy的基类(如Base),并定义了表的结构和字段。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, StringBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)fullname = Column(String)nickname = Column(String)

4. 创建表

在定义了模型之后,你需要使用SQLAlchemy的元数据来创建数据库表。这通常是在应用程序启动时完成的。

from sqlalchemy.orm import sessionmaker# 创建所有定义的表
Base.metadata.create_all(engine)# 创建会话类
Session = sessionmaker(bind=engine)
session = Session()

5. 操作数据库

现在你可以使用会话来操作数据库了。你可以添加、查询、更新和删除记录。

# 添加一个用户
new_user = User(name='John', fullname='John Doe', nickname='johndoe')
session.add(new_user)
session.commit()# 查询用户
users = session.query(User).all()
for user in users:print(user.name, user.fullname)# 更新用户
user = session.query(User).filter_by(name='John').first()
user.fullname = 'John Doe II'
session.commit()# 删除用户
user = session.query(User).filter_by(name='John').first()
session.delete(user)
session.commit()

6. 关闭会话

最后,不要忘记关闭会话以释放资源。

session.close()

结论

SQLAlchemy是一个功能强大的ORM工具,它使得Python开发者能够更加方便地操作数据库。通过ORM,开发者可以使用Python的面向对象编程范式来操作数据库,而无需编写复杂的SQL语句。SQLAlchemy还支持丰富的查询构造和事务管理功能,使得数据库操作更加灵活和高效。

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

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

相关文章

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】卷积

卷积经常用在信号处理中,用于计算信号的延迟累积。假设一个信号发射器每个时刻 t t t产生一个信号 x t x_t xt​,其信息的衰减率为 w k w_k wk​,即在 k − 1 k-1 k−1个时间步长后,信息为原来的 w k w_k wk​倍,时刻 …

SpringBoot开启事务日志

一般框架开启日志的方式: 开启某个包下的日志就写该包路径,开启某个类下的日志就写该类路径。

【数据结构】栈的定义与实现(附完整运行代码)

目录 一、栈的定义 二、顺序栈 链栈比较 三、栈的实现(顺序栈) 3.1 ❥ 定义栈结构 3.2 ❥ 初始化 3.3 ❥ 销毁 3.4 ❥ 插入(入栈) 3.5 ❥ 删除 (出栈) 3.6 ❥ 获取栈顶元素 3.7 ❥ 判空 3.8 ❥…

【LeetCode】每日一题:最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 解题思路 要注意最小值是整个前缀,主要是cumsum然后按照买卖股票的思路做的&a…

【Android】创建一个可以在屏幕上拖动的悬浮窗

项目需求 在界面上创建一个悬浮窗&#xff0c;可以自由的移动这个悬浮窗 需求解决 1.添加权限 <uses-permission android:name"android.permission.SYSTEM_ALERT_WINDOW"/>2.请求权限 从 Android 6.0 (API 23) 开始&#xff0c;应用需要动态请求显示悬浮窗…

F5《企业DNS建设白皮书》中的DNS解析服务器最佳实践

在这个数字化转型加速的时代&#xff0c;DNS&#xff08;域名系统&#xff09;的重要性不言而喻。每一次重大事件都凸显了DNS的可靠性和安全性问题。对企业而言&#xff0c;它不仅关系到业务连续性&#xff0c;更是提供永续数字服务的关键。本文根据F5公司发布的《企业DNS建设白…

中国4个民族群体的全基因组DNA甲基化变异图谱首次发布

2023年4月&#xff0c;由西北工业大学联合复旦大学等院校在Science China Life Sciences上发表题为“Genome-wide DNA methylation landscape of four Chinese populations and epigenetic variation linked to Tibetan high altitude adaptation”的文章&#xff0c;该研究通过…

【AI编译器】triton学习:编程模型

介绍 动机 在过去十年里&#xff0c;深度神经网络 (DNNs) 已成为机器学习 (ML) 模型的一个重要分支&#xff0c;能够实现跨领域多种应用中的最佳性能。这些模型由一系列包括参数化&#xff08;如滤波器&#xff09;和非参数化&#xff08;如缩小值函数&#xff09;元件组成的…

Android | 性能优化 之 TraceView工具的使用

上代码&#xff01; 先加权限&#xff1a; <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 选择跟踪范围,在开始追踪和结束…

axios常用的请求方式

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 Node.js 环境。它允许开发者以简单和直观的方式发送HTTP 请求。 Axios 支持所有标准的 HTTP 请求方法&#xff0c;以下是一些常用的请求方式&#xff1a; GET&#xff1a;用于从服务器获取数据。POST&#x…

景联文科技构建高质量多轮对话数据库,赋能AI交互新飞跃

近年来&#xff0c;大语言模型的发展极大推动了自然语言处理领域的进步&#xff0c;大语言模型正引领智能对话领域进入一个全新时代&#xff0c;不仅提升了对话体验的自然度和效率&#xff0c;也为探索更加人性化、智能化的交互方式开辟了道路。 景联文科技作为大语言模型数据服…

node.js 离线实时语音识别

前言 在node.js实现语音实时转文字。获取麦克风实时语音转文字。 下面是用vosk的效果。注意踩坑要及时评论哦&#xff0c;坑还是挺多的。 在探索后发现本地模型对设备还是有一定要求的&#xff0c;最总无奈采用百度语音识别的方案。 探索结果分享给大家&#xff0c;希望能在项…

AI视频教程下载-定制GPT:使用您的数据创建一个定制聊天GPT

Custom GPTs_ Create a Custom ChatGPT with Your Data 构建一个定制的GPT&#xff0c;与您自己的数据进行聊天。添加文档&#xff0c;生成图像&#xff0c;并集成API和Zapier。 这门全面的Udemy课程专为那些渴望学习如何创建自己定制版ChatGPT的人设计&#xff0c;以满足他们…

GORM 使用指南

1. 介绍 1.1 什么是 GORM&#xff1f; GORM&#xff08;Go Object Relational Mapper&#xff09;是一个用于 Go 语言的 ORM 库&#xff0c;它允许开发者通过面向对象的方式操作数据库&#xff0c;而不必直接编写 SQL 查询语句。GORM 提供了简单易用的 API&#xff0c;使得在…

【五子棋game】

编写一个五子棋游戏程序可以分为几个步骤&#xff1a;设计棋盘、定义规则、实现人机交互、判断胜负。下面是一个简化的五子棋游戏程序示例&#xff0c;使用Python语言编写。 首先&#xff0c;我们需要一个棋盘。可以使用一个二维数组来表示棋盘&#xff0c;其中0表示空位&#…

jstack的火焰图使用说明

1、jstack的官方文档说明 How to use Flame Graph? - Fast thread 2、jstack的文件分析网站&#xff0c;可以关注cpu消耗比较高的线程和火焰图 GC log analysis error

AI人工智能发展的技术路线差异对比分析报告

1. 机器学习与深度学习 机器学习和深度学习是AI领域的两种主要技术路线。机器学习是一种数据驱动的方法,通过训练模型来识别模式和规律。深度学习是机器学习的一个子领域,主要关注神经网络模型,特别是深度神经网络。深度学习在图像识别、语音识别等领域取得了显著的成果,但…

基于springboot+Vue高校宿舍管理系统的设计与实现【附源码】

本科毕业设计&#xff08;论文&#xff09; 基于springbootVue高校宿舍管理系统的设计与实现 目录 摘要 2 第一章 绪论 2 1.1 开发背景 2 1.2 开发意义 2 第二章 系统分析 3 2.1 系统的需求分析 3 2.2 系统开发设计思想 3 2.3系统开发步骤 3 2.4 系统的主要技术 4 2.4.1 B/S系…

JavaWeb系列八: WEB 开发通信协议(HTTP协议)

HTTP协议 官方文档什么是HTTP协议快速入门页面请求的一个问题(分析)http请求包分析(get)http请求包分析(post)GET请求 POST请求分别有哪些http响应包分析常用的状态码说明状态码200状态码404状态码500状态码302状态码304 MIME类型MIME介绍常见的 MIME 类型 官方文档 HTTP常见请…

七个值得收藏的资源网站,一定要码住~

1、壁纸网站&#xff1a;wallhere https://wallhere.com/ 这是一个免费的高清壁纸网站&#xff0c;各种类型的壁纸资源都有&#xff0c;高清无水印&#xff0c;每款壁纸都能下载到不同的尺寸&#xff0c;适应电脑、安卓手机和苹果手机的屏幕 2、电子书网站&#xff1a;熊猫搜…