SQLAlchemy映射表结构和对数据的CRUD
目录
ORM模型映射到数据库中
SQLAlchemy对数据的增删改查操作编辑
构建session对象
添加对象
查找对象
修改对象
删除对象
ORM模型映射到数据库中
用declarative_base
根据engine
创建一个ORM基类
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine(DB_URI)
Base = declarative_base(engine)
用这个Base
类作为基类来写自己的ORM类。要定义__tablename__
类属性,来指定这个模型映射到数据库中的表名
class Person(Base):__tablename__ ='t_person'
创建属性来映射到表中的字段,所有需要映射到表中的属性都应该为Column类型
class Person(Base):__tablename__ ='t_person'# 在这个ORM模型中创建一些属性,来跟表中的字段进行一一映射。# 这些属性必须是sqlalchemy给我们提供好的数据类型id = Column(Integer,primary_key=True,autoincrement=True)name = Column(String(50))age = Column(Integer)country = Column(String(50))
使用Base.metadata.create_all()
来将模型映射到数据库中
Base.metadata.create_all()
注意
一旦使用
Base.metadata.create_all()
将模型映射到数据库中后,即使改变了模型的字段,也不会重新映射了
SQLAlchemy对数据的增删改查操作
构建session对象
所有和数据库的ORM操作都必须通过一个叫做
session
的会话对象来实现,通过以下代码来获取会话对象
from sqlalchemy.orm import sessionmaker
engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)()
from sqlalchemy.orm import sessionmaker
: 这行代码导入了sessionmaker
,它是用于创建会话(session)的工厂函数。
engine = create_engine(DB_URI)
: 这行代码使用了之前构建的数据库连接字符串(DB_URI
)来创建了一个数据库引擎(engine
)。
Base = declarative_base(engine)
: 这行代码使用了declarative_base
函数来创建了一个基类(Base
)。然而,请注意,在declarative_base
函数中传递了一个参数engine
,这将指定此基类使用的数据库引擎。
session = sessionmaker(engine)()
: 这行代码创建了一个会话(session)对象(session
)。sessionmaker
函数接受一个引擎作为参数,用于创建会话。注意后面的额外的一对括号()
,它们实际上调用了sessionmaker
返回的函数,以创建一个实际的会话对象。
添加对象
def create_data_one():with Session() as session:p1 = Person(name = '春秋',age = 6 , country='北京')session.add(p1)session.commit()def create_data_many():with Session() as session:p2 = Person(name = '吕布',age = 19 , country='北京')p3 = Person(name = '貂蝉',age = 18 , country='北京')session.add_all([p2,p3])session.commit()
create_data_one()
函数:
这个函数使用了一个上下文管理器(
with Session() as session
),它创建了一个会话对象session
。在这个函数中,创建了一个名为
p1
的Person
对象,该对象具有名字、年龄和国家信息。然后将
p1
添加到了会话中 (session.add(p1)
)。最后调用
session.commit()
来提交这个会话,将数据保存到数据库中。
create_data_many()
函数:
同样地,这个函数也使用了上下文管理器来创建一个会话对象
session
。在这个函数中,创建了两个名为
p2
和p3
的Person
对象,分别代表了两个不同的人员信息。使用
session.add_all([p2, p3])
一次性将这两个对象添加到会话中。最后调用
session.commit()
来提交这个会话,将数据保存到数据库中。
查找对象
def query_data_all():with Session() as session:all_person = session.query(Person).all()for p in all_person:print(p.name)def query_data_one():with Session() as session:p1 = session.query(Person).first()print(p1.name)
def query_data_by_params():with Session() as session:# p1 = session.query(Person).filter_by(name='吕布').first()p1 = session.query(Person).filter(Person.name == '吕布').first()print(p1.age)
query_data_all()
函数:
使用上下文管理器创建了一个会话对象
session
。使用
session.query(Person).all()
查询了所有的Person
对象,并将它们以列表的形式返回给变量all_person
。然后通过一个循环遍历了所有的人员,并打印了他们的名字。
query_data_one()
函数:
同样地,使用上下文管理器创建了一个会话对象
session
。使用
session.query(Person).first()
查询了第一个Person
对象,并将其赋给了变量p1
。最后打印了
p1
对象的名字。
query_data_by_params()
函数:
这个函数演示了如何通过特定的条件来查询数据。
使用了上下文管理器创建了一个会话对象
session
。通过
session.query(Person).filter(Person.name == '吕布').first()
查询了名字为 '吕布' 的第一个Person
对象,并将其赋给了变量p1
。最后打印了
p1
对象的年龄。
修改对象
def update_data():with Session() as session:p1 = session.query(Person).filter(Person.name == '吕布').first()p1.age = 20# 提交事务session.commit()
使用上下文管理器创建了一个会话对象
session
。使用
session.query(Person).filter(Person.name == '吕布').first()
查询了名字为 '吕布' 的第一个Person
对象,并将其赋给了变量p1
。将
p1
对象的age
属性更新为20
:p1.age = 20
。最后,通过
session.commit()
提交了事务,将更新保存到数据库中
删除对象
将需要删除的数据从数据库中查找出来,然后使用session.delete
方法将这条数据从session中删除,最后做commit操作就可以了
def delete_data():with Session() as session:p1 = session.query(Person).filter(Person.name == '貂蝉').first()session.delete(p1)session.commit()
使用上下文管理器创建了一个会话对象
session
。使用
session.query(Person).filter(Person.name == '貂蝉').first()
查询了名字为 '貂蝉' 的第一个Person
对象,并将其赋给了变量p1
。使用
session.delete(p1)
删除了p1
对象,即删除了名字为 '貂蝉' 的人员信息。最后,通过
session.commit()
提交了事务,将删除操作保存到数据库中。
相关文章:

SQLAlchemy映射表结构和对数据的CRUD
目录 ORM模型映射到数据库中 SQLAlchemy对数据的增删改查操作编辑 构建session对象 添加对象 查找对象 修改对象 删除对象 ORM模型映射到数据库中 用declarative_base根据engine创建一个ORM基类 from sqlalchemy.ext.declarative import declarative_base engine cr…...

Spring boot原理
起步依赖 Maven的传递依赖 自动配置 Springboot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。 自动配置原理: 方案一…...

技术贴 | 深度解析 PostgreSQL Protocol v3.0(二)— 扩展查询
引言 PostgreSQL 使用基于消息的协议在前端(客户端)和后端(服务器)之间进行通信。该协议通过 TCP/IP 和 Unix 域套接字支持。 《深度解析 PostgreSQL Protocol v3.0》系列技术贴,将带大家深度了解 PostgreSQL Protoc…...

HDFS编程实践-从HDFS中下载指定文件到本地
前言:Hadoop采用java语言开发,提供了Java Api与HDFS进行交互 先要把hadoop的jar包导入到idea中去 为了能编写一个与hdfs交互的java应用程序,一般需要向java工程中添加以下jar包 1)/usr/local/hadoop/share/hadoop/common目录下…...

安防监控视频AI智能分析网关:人流量统计算法的应用场景汇总
TSINGSEE青犀人流量检测算法是内置在智能分析网关中的一种能够通过AI分析和计算人群数量以及密度的算法技术,在提升城市管理效率、改善用户体验和增加安全性方面发挥着重要作用。人流量检测算法在许多领域都有广泛的应用,如智慧城市、智慧交通、智慧景区…...

第一百五十二回 自定义组件综合实例:游戏摇杆三
文章目录 内容回顾优化性能示例代码我们在上一章回中介绍了 如何实现游戏摇杆相关的内容,本章回中将继续介绍这方面的知识.闲话休提,让我们一起Talk Flutter吧。 内容回顾 我们在前面章回中介绍了游戏摇杆的概念以及实现方法,并且通过示例代码演示了实现游戏摇杆的整个过程…...

多线程的学习中篇上
终其一生,满是遗憾 知足且坚定,温柔且上进 总之岁月漫长,然而值得等待 获取当前线程引用 方法说明public static Thread currentThread();返回当前线程对象的引用 currentThread() > 在那个线程中, 就能获取到那个线程的实例. static关键…...

非标准化套利
交易对象:目前使用非标准化组合进行交易。(即黄金远近月,焦煤焦炭等等) 交易平台:易盛极星极星产品网 手续费研究:白糖期货手续费和保证金2023年09月更新 - 九期网 本人使用的期货交易公司:中信期货&…...

从CNN(卷积神经网络),又名CAM获取热图
一、说明 卷积神经网络(CNN)令人难以置信。如果你想知道它如何看待世界(图像),有一种方法是可视化它。 这个想法是,我们从最后的密集层中得到权重,然后乘以最终的CNN层。这需要全局平均…...

kafka消费者多线程开发
目录 前言 kafka consumer 设计原理 多线程的方案 参考资料 前言 目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单…...

布局设计和实现:计算器UI【TableLayout、GridLayout】
一、使用TableLayout实现计算器UI 1.新建一个空白项目布局 根据自己的需求输入其他信息 填写完成后,点击Finish即可 2. 设计UI界面 在res/layout文件夹中的XML文件中创建UI界面。在这个XML文件中,您可以使用TableLayout来设计计算器界面。 2.1 创建l…...

stack与queue的简单封装
前言: stack与queue即栈和队列,先进后出/先进先出的特性我们早已了然于心, 在学习数据结构时,我们利用c语言实现栈与队列,从结构体写起,利用数组或指针表示他们的数据成员,之后再一个个实现他们…...

ChatGPT使用技巧整理
目录 1. 让ChatGPT扮演专家角色2. 告诉ChatGPT你的身份3. 限制ChatGPT的回答长度4. 让ChatGPT一步步思考5. 明确你的要求和目的6. 提供充分的背景信息7. 始终结构化思考你的prompt1. 让ChatGPT扮演专家角色 当你们讨论的是市场营销问题时,你可以要求ChatGPT扮演一个具有20年从…...
机器学习笔记 - 维度诅咒的数学表达
1、点之间的距离 kNN分类器假设相似的点也可能有相同的标签。但是,在高维空间中,从概率分布中得出的点往往不会始终靠近在一起。 我们可以用一个简单的例子来说明这一点。 我们将在单位立方体内均匀地随机绘制点(如图所示),并研究该立方体内测试点的 k 个最近邻将占用多少…...

组合计数训练题解
CF40E 题目链接 点击打开链接 题目解法 首先,如果 n , m n,m n,m 一奇一偶,那么答案为 0 0 0 原因是从行和列的角度分析, − 1 -1 −1 个数的奇偶性不同 可以发现 k < max { n , m } k<\max\{n,m\} k<max{n,m} 的性质很微…...

P1095 [NOIP2007 普及组] 守望者的逃离
[NOIP2007 普及组] 守望者的逃离 - 洛谷 首先DP的套路就是先找状态 这题也找不出其他的状态了,只有时间一个 所以用f[i]表示时刻i能走多远 而仔细一想实际上决策只有跑、闪现、停三种决策 然而闪现的耗蓝要和跑步一同计算十分麻烦 于是把它们分开算࿱…...

Python函数绘图与高等代数互融实例(八):箱线图|误差棒图|堆积图
Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 Python函数绘图与高等代数互融实例(五…...

联想y7000 y7000p 2018/2019 不插电源 不插充电器, 直接关机 ,电量一直89%/87%/86%,V0005如何解决?
这种问题,没有外力破坏的话,电池不可能突然出事。这种一般是联想的固件问题,有可能发生在系统更新,或者突然的不正常关机或长时间电池过热,原因我不是很清楚。 既然发生了,根据我收集的解决方法,…...

stm32与esp8266通信
esp8266 #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h>// 测试HTTP请求用的URL // #define URL "http://162.14.107.118:8086/PC/modifyFoodPrice/0/6"// 测试HTTP请求用的URL // 设置wifi接入信息(请根据您的WiFi信息进行修改) const char…...

组合数 2.1 2.2
O(nlogn)预处理, O(1)查询 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll; typedef long double ld;const int N 1000…...

【数组的中心位置】python实现-附ChatGPT解析
1.题目 数组的中心位置 题目 给你一个整数数组 nums,请计算数组的中心位置。 数组中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。 数组第一个元素的左侧积为 1,最后一个元素的右侧积为 1。 如果数组有多个中心位置,应该返回最靠近左边的那一个…...

黑马JVM总结(二十三)
(1)字节码指令-init 方法体内有一些字节,对应着将来要由java虚拟机执行方法内的代码,构造方法里5个字节代码,main方法里有9个字节的代码 java虚拟机呢内部有一个解释器,这个解释器呢可以识别平台无关的字…...

AI人体行为分析:玩手机/打电话/摔倒/攀爬/扭打检测及TSINGSEE场景解决方案
一、AI人体行为分析技术概述及场景 人体姿态分析/行为分析/动作识别AI算法,是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算机视觉、深度学习和模式识别等技术,可以实现对人体姿态、动作和行为的自动化识别与分析。 在场景应用…...

HI_NAS linux 记录
dev/root 100% 占用解决记录 通过下面的命令查看各文件夹 大小 sudo du --max-depth1 -h # 统计当前文件夹下各个文件夹的大小显示为M 最终发现Var/log 占用很大空间 发现下面两个 log 占用空间很大,直接 rm-rf 即可 HI NAS python3 记录 # 安装pip3 sudo apt u…...

计算机图形学中的几何光学
文章目录 前言一、图形学中的光学二、光照模型1、经验型(简单)2、物理型(复杂) 前言 在学习Shader光照之前了解一下计算机图形学 一、图形学中的光学 镜面反射的效果例子:物体表面高光 慢反射的效果的例子:…...

「UG/NX」BlockUI 选择小平面区域 Select Facet Region
✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 控件说…...

【完全二叉树魔法:顺序结构实现堆的奇象】
本章重点 二叉树的顺序结构堆的概念及结构堆的实现堆的调整算法堆的创建堆排序TOP-K问题 1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构…...

Maven官方镜像仓库与阿里云云效Maven
一、Maven官方镜像仓库 download maven-3 右击复制链接地址,使用wget命令直接在linux中下载: wget 链接地址history 二、阿里云云效Maven 详情查看maven 配置指南 打开 maven 的配置文件( windows 机器一般在 maven 安装目录的 conf/…...

python系列教程215——列表解析与矩阵
朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow 声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享…...

fonts什么文件夹可以删除吗?fonts文件夹删除了怎么恢复
在电脑上,fonts文件夹是存放字体文件的目录之一。尽管有时可能考虑删除该文件夹以节省硬盘空间或出于其他原因,但删除该文件夹可能会导致系统字体问题,影响用户的正常使用。因此,在删除之前需要考虑是否可以删除fonts文件夹&#…...