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

关于sqlalchemy的使用

关于sqlalchemy的使用

  • 说明
  • 一、sqlachemy总体使用思路
  • 二、安装与创建库、连结库
  • 三、创建表、增加数据
  • 四、查询记录
  • 五、更新或删除
  • 六、关联表定义
  • 七、一对多关联查询
  • 八、映射类定义与添加记录

说明

  1. 本教程所需软件及库python3.10、sqlalchemy
  2. 安装与创建库、连结库
  3. 创建表、增加数据
  4. 查询记录
  5. 更新或删除
  6. 关联表定义

一、sqlachemy总体使用思路

  1. 在创建或连结后会返回engine(可以参考第二节安装与创建库、连结库)
  2. 在创建表后会返回一个表名(可以参考第三节创建表、增加数据)
  3. 使用时表名.方法.属性
  4. 方法有insert,select,update,delecte
  5. 与数据对接时,conn = engine.connect()—conn.execut(表方法返回的值)
  6. 当数据库的数据发生改变时,要提交(conn.commit())
  7. 查询时,要注意条件,有两种方法where() | or_ | and_

二、安装与创建库、连结库

  1. 安装库
pip install sqlalchemy
#查看版本
sqlalchemy.__vetrsion__
  1. 创建库或连结库
#连结或创建sqlite3
from sqlalchemy import create_engine
engine = create_engine('sqlite:///db_path.db',echo=True)
conn = engine.connect()
#连结或创建mysql
from sqlalchemy import create_engine
engine = create_engine('mysql://user:pwd@localhoast/库名',echo=True)
conn = engine.connect()

注:create_engine如果已经存在就连结,如果不存在就创建。

  1. 在sqlalchemy执行sql语句
import sqlachemy
query = sqlachemy.text("select * from 表名")#sql语句
engine = sqlalchemy.create_engine(`sqlite:///db_path.db`,echo=True)
conn = engine.connect()
result_set = conn.execute(query)
print(result_set.all())
conn.close()
engine.dispose()

注:以下代码engine代表创建或检查数据库,conn代表连结数据库。

三、创建表、增加数据

  1. 创建表
    创建表要用到sqlalchemy的三个库MetaData、Table、Column及类型代码
from sqlalchemy import MetaData,Table,Column
meta = MetaData()
#Meta定义好的字段属性存在这,所以第二个字段就要传它
var = Table(
'表名',meta,
Clolumn('字段名',sqlachemy.类型,primary_key=True),
.......
)
meta.create_all(engine)#创建表

如果表已经存在了,就不会创建,如果不存在就创建。
2. sqlachemy字段类型

名称字段英文用法说明
整形IntegerInteger存整数
小数存小数
字符StringString(字符个数)存字符
日期DateDate存年月日

注:主键primary_key=True,unique=True唯一,unllable=True不能为空。

  1. 增加数据(insert)
    3.1 插入一条数据
var = 表名.insert().values(字段名=值,......)
with engine.connect() as conn:conn.execute(var)conn.commit()

1、连结conn以后执行数据库操作要用conn.execut(sqlachemy语句)
2、数据库数据有变要提交事务,conn.commit()
3、var = 表名.insert().values(字段名=值,…)是新增数据的sqlachemy语句
4、 自增长是插一次,它就增加一次,它不管你是否成功
3.2 插入多条数据

var = 表名.insert()
with engine.connect() as conn:conn.execute(var,[{'字段名':value,.......},{'字段名':value,.......},........])conn.commit()

这个要用列表,并且列表里放字典,key是字段名,value是对应的值

四、查询记录

  1. sql查询语句
select * from 表名
  1. 函数表达式
表名.select()
  1. 结果获取
结果.fetchall()#获取所有数据
结果.fetchone()#获取第一条数据
  1. 条件查询
表名.select().where(表名.c.字段名条件)
#一次只能有一个条件
#如果多个条件查询时,在后面加.where(表名.c.字段名条件)
  1. and_(与)、or_(或)
from sqlalchemy.sql import and_,or_
表名.select().where(or_(条件,条件.....) | and_(条件,条件.....))
# 要在where中使用and_,or_
# and_,or_可以相互嵌套

五、更新或删除

  1. 更新
表名.update().where(条件).values(字段名=value)
#查询结果后再更新值,一个values可以更新多条记录或所有记录,取决于查询的结果
  1. 删除
表名.delete().where(条件)
#查询结果后再删除,可以删除多条记录或所有记录,取决于查询的结果

六、关联表定义

  1. 一对多关联(sqlachemy.ForeignKey(‘表名.id’))
import sqlalchemy
#创建表
mate = sqlalchemy.MateData()
表名 = sqlachemy.Table('表名',mate,sqlachemy.Column('字段名',sqlachemy.Integer,sqlachemy.ForeignKey('关联的表名.id'),nullable=False),)
  1. 多对多

七、一对多关联查询

  1. 查询条件
imort sqlalchemy
join = 关联表名.join(被关联表名,关联表名.c.id==被关联表名.c.id)
  1. 使用查询
imort sqlalchemy
join = 关联表名.join(被关联表名,关联表名.c.id==被关联表名.c.id)
#关联表和被关联表的信息都显示
query = sqlalchemy.select(join).where(关联表或被关联表.字段=value)
#只显示关联表或被关联表的信息
query = sqlalchemy.select(被关联表名或关联表名).select_from(join).where(关联表或被关联表.字段=value)
print(conn.execute(query).fetchall())

八、映射类定义与添加记录

  1. 映射基础
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()class 类名(Base):__tablename__='表名'字段名 = Column(类型,其它参数)......
#创建表
类名.metadata.create_all(engine) 
  1. 利用类添加记录
from sqlalchemy.orm import sessionmakerSession = sessionmaker(bind=engine)session = Session()
#上面的类名
#增加一条记录
var = 类名(字段名=value,......)#类名实例化
session.add(var)
session.commit()
#增加多条记录
varList = [类名实例化列表]
session.add_all(varList)
session.commit()

相关文章:

关于sqlalchemy的使用

关于sqlalchemy的使用 说明一、sqlachemy总体使用思路二、安装与创建库、连结库三、创建表、增加数据四、查询记录五、更新或删除六、关联表定义七、一对多关联查询八、映射类定义与添加记录 说明 本教程所需软件及库python3.10、sqlalchemy安装与创建库、连结库创建表、增加数…...

利用LLMs准确预测旋转机械(如轴承)的剩余使用寿命(RUL)

研究背景 研究问题:如何准确预测旋转机械(如轴承)的剩余使用寿命(RUL),这对于设备可靠性和减少工业系统中的意外故障至关重要。研究难点:该问题的研究难点包括:训练和测试阶段数据分布不一致、长期RUL预测的泛化能力有限。相关工作:现有工作主要包括基于模型的方法、数…...

深度学习 PyTorch 中 18 种数据增强策略与实现

深度学习pytorch之简单方法自定义9类卷积即插即用 数据增强通过对训练数据进行多种变换,增加数据的多样性,它帮助我们提高模型的鲁棒性,并减少过拟合的风险。PyTorch 提供torchvision.transforms 模块丰富的数据增强操作,我们可以…...

视觉图像处理

在MATLAB中进行视觉图像处理仿真通常涉及图像增强、滤波、分割、特征提取等操作。以下是一个分步指南和示例代码,帮助您快速入门: 1. MATLAB图像处理基础步骤 1.1 读取和显示图像 % 读取图像(替换为实际文件路径) img = imread(lena.jpg); % 显示原图 figure; subplot(2…...

深度学习与普通神经网络有何区别?

深度学习与普通神经网络的主要区别体现在以下几个方面: 一、结构复杂度 普通神经网络:通常指浅层结构,层数较少,一般为2-3层,包括输入层、一个或多个隐藏层、输出层。深度学习:强调通过5层以上的深度架构…...

Vue3、vue学习笔记

<!-- Vue3 --> 1、Vue项目搭建 npm init vuelatest cd 文件目录 npm i npm run dev // npm run _ 这个在package.json中查看scripts /* vue_study\.vscode可删 // vue_study\src\components也可删除(基本语法&#xff0c;不使用组件) */ // vue_study\.vscode\lau…...

python中C#类库调用+调试方法~~~

因为开发需要&#xff0c;我们经常会用C#来写一些库供python调用&#xff0c;但是在使用过程中难免会碰到一些问题&#xff0c;需要我们抽丝剥茧来解决~~~ 首先&#xff0c;我们在python中要想调用C#(基于.net)的dll&#xff0c;需要安装一个库&#xff0c;它就是 pythonnet …...

L33.【LeetCode笔记】循环队列(数组解法)

目录 1.题目 2.分析 方法1:链表 尝试使用单向循环链表模拟 插入节点 解决方法1:开辟(k1)个节点 解决方法2:使用变量size记录队列元素个数 获取队尾元素 其他函数的实现说明 方法2:数组 重要点:指针越界的解决方法 方法1:单独判断 方法2:取模 3.数组代码的逐步实现…...

css实现元素垂直居中显示的7种方式

文章目录 * [【一】知道居中元素的宽高](https://blog.csdn.net/weixin_41305441/article/details/89886846#_1) [absolute 负margin](https://blog.csdn.net/weixin_41305441/article/details/89886846#absolute__margin_2) [absolute margin auto](https://blog.csdn.net…...

【Python】Django 中的算法应用与实现

Django 中的算法应用与实现 在 Django 开发中&#xff0c;算法的应用可以极大地扩展 Web 应用的功能和性能。从简单的数据处理到复杂的机器学习模型&#xff0c;Django 都可以作为一个强大的后端框架来支持这些算法的实现。本文将介绍几种常见的算法及其在 Django 中的使用方法…...

Docker 运行 GPUStack 的详细教程

GPUStack GPUStack 是一个用于运行 AI 模型的开源 GPU 集群管理器。它具有广泛的硬件兼容性&#xff0c;支持多种品牌的 GPU&#xff0c;并能在 Apple MacBook、Windows PC 和 Linux 服务器上运行。GPUStack 支持各种 AI 模型&#xff0c;包括大型语言模型&#xff08;LLMs&am…...

Kubernetes中的 iptables 规则介绍

#作者&#xff1a;邓伟 文章目录 一、Kubernetes 网络模型概述二、iptables 基础知识三、Kubernetes 中的 iptables 应用四、查看和调试 iptables 规则五、总结 在 Kubernetes 集群中&#xff0c;iptables 是一个核心组件&#xff0c; 用于实现服务发现和网络策略。iptables 通…...

解决VScode 连接不上问题

问题 &#xff1a;VScode 连接不上 解决方案&#xff1a; 1、手动杀死VS Code服务器进程&#xff0c;然后重新尝试登录 打开xshell &#xff0c;远程连接服务器 &#xff0c;查看vscode的进程 &#xff0c;然后全部杀掉 [cxqiZwz9fjj2ssnshikw14avaZ ~]$ ps ajx | grep vsc…...

AI 驱动的软件测试革命:从自动化到智能化的进阶之路

&#x1f680;引言&#xff1a;软件测试的智能化转型浪潮 在数字化转型加速的今天&#xff0c;软件产品的迭代速度与复杂度呈指数级增长。传统软件测试依赖人工编写用例、执行测试的模式&#xff0c;已难以应对快速交付与高质量要求的双重挑战。人工智能技术的突破为测试领域注…...

【Java代码审计 | 第六篇】XSS防范

文章目录 XSS防范使用HTML转义使用Content Security Policy (CSP)输入验证使用安全的库和框架避免直接使用用户输入构建JavaScript代码 XSS防范 使用HTML转义 在输出用户输入时&#xff0c;对特殊字符进行转义&#xff0c;防止它们被解释为HTML或JavaScript代码。 例如&…...

Android WebSocket工具类:重连、心跳、消息队列一站式解决方案

依赖库 使用 OkHttp 的WebSocket支持。 在 build.gradle 中添加依赖&#xff1a; implementation com.squareup.okhttp3:okhttp:4.9.3WebSocket工具类实现 import okhttp3.*; import android.os.Handler; import android.os.Looper; import android.util.Log;import java.ut…...

认识vue2脚手架

1.认识脚手架结构 使用VSCode将vue项目打开&#xff1a; package.json&#xff1a;包的说明书&#xff08;包的名字&#xff0c;包的版本&#xff0c;依赖哪些库&#xff09;。该文件里有webpack的短命令&#xff1a; serve&#xff08;启动内置服务器&#xff09; build命令…...

【STM32】STM32系列产品以及新手入门的STM32F103

&#x1f4e2; STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU&#xff0c;适用于工业、汽车、消费电子等领域&#xff1b;基于 ARM Cortex-M3&#xff0c;主频最高 72MHz&#xff0c;支持 512KB Flash、64KB SRAM&#xff0c;适合复杂嵌入式应用&#xff0c;提供丰富的…...

<建模软件安装教程1>Blender4.2系列

Blender4.2安装教程 0注意&#xff1a;Windows环境下安装 第一步&#xff0c;百度网盘提取安装包。百度网盘链接&#xff1a;通过网盘分享的文件&#xff1a;blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…...

CentOS Docker 安装指南

CentOS Docker 安装指南 引言 Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。Docker 容器是完全使用沙箱机制&#xff0c;相互之…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...