SQLAlchemy系列之新增数据、删除数据、更新数据
最编程
2024-01-02 13:53:31
...
操作前我们先来看一看test数据下的数据表情形
下面开始对数据表employees的数据进行操作。按照惯例先给出完整的代码,再对代码逐一进行说明。
1.新增数据
新增数据首先要创建一个会话对象,用于执行SQL语句,具体代码如下(创建数据表的内容前文已经讲述,这里不再赘述):
from sqlalchemy.orm import sessionmaker
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
new_data = Employees(name='Li Lei', sex='男', age=25, birth='1993-10-23', jobs='测试', firJob='2017-9-11', hire_date='2018-3-7')
session.add(new_data)
session.commit()
session.close()
建表新增数据后的情形:
引入sessionmaker模块,指明绑定已连接数据库的engine对象,生成会话对象session,该对象用于数据库的增、删、改、查等操作。一般来说,SQLAlchemy对这类操作有自身的语法支持。 另外,session.close()用于关闭会话,销毁代码中创建的数据库会话对象。 session。commit()提交事务一定要放在session.colse()之前,否则事务提交无效
2.删除数据
先来看看删除前的情形:
删除数据是使用SQLAlchemy的delete()方法进行实现,具体代码如下删除数据的代码如下(创建数据表的内容前文已经讲述,这里不再赘述)
from sqlalchemy.orm import sessionmaker
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 删除数据
del_data = session.query(Employees).filter_by(id=1).delete()
print('已删除数据的数据量为:', del_data)
session.commit()
session.close()
result:
已删除数据的数据量为: 1
删除数据后数据库的情形:
3.更新数据
3.1 使用update()方法更新数据
更新前的情形:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DATE
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8', echo=True)
Base = declarative_base()
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
session.query(Employees).filter_by(id=1).update({Employees.age: 12})
session.commit()
session.close()
更新后的情形:
3.2 使用赋值方式更新数据
更新前的情形:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DATE
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8', echo=True)
Base = declarative_base()
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
get_data = session.query(Employees).filter_by(id=5).first()
get_data.name = '张三'
session.commit()
session.close()
更新后的情形:
推荐阅读
-
什么是数据库事物?为什么需要数据库事物,事物有哪些特征?事物的隔离级别是什么?-1.什么是数据库事务? 1.事务是作为一个逻辑单元执行的一系列操作。一个逻辑工作单元必须具备四个属性,即ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为事务: 原子性 2.事务必须是一个原子工作单元;它的数据修改要么全部执行,要么全部不执行。 一致性 3.事务完成时,所有数据必须保持一致。在相关数据库中,所有规则都必须适用于事务的修改,以保持所有数据的完整性。事务结束时,所有内部数据结构(如 B 树索引或双向链接表)必须正确无误。 隔离 4.并发事务的修改必须与其他并发事务的修改隔离。一个事务会在另一个并发事务修改之前或之后查看某一状态下的数据,而不会查看中间状态下的数据。这就是所谓的可序列化,因为它允许重新加载起始数据和重放一系列事务,从而使数据最终处于与原始事务执行时相同的状态。 持久性 5.事务完成后,它对系统的影响是永久性的。即使在系统发生故障的情况下,修改也会保留。 2. 为什么需要数据库事物,事物有哪些特征? 事物对数据库的作用是对数据进行一系列操作,要么全部成功,要么全部失败,防止出现中间状态,确保数据库中的数据始终处于正确、和谐的状态。 特征:原子性、一致性、隔离性、持久性,以及其他特征 原子性(Atomicity):所有操作在事务开始后,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出现错误时,会回滚到事务开始前的状态,所有操作就像没有发生一样。也就是说,事务是一个不可分割的整体,就像化学中的原子一样,是物质的基本单位。 一致性(Consistency):在事务开始之前和结束之后,数据库的完整性约束都没有被破坏。例如,如果 A 转钱给 B,A 不可能扣除这笔钱,但 B 却没有收到这笔钱。 隔离:在同一时间内,只允许一个事务请求相同的数据,不同事务之间没有干扰。例如,甲正在从一张银行卡上取款,在甲取款过程结束之前,乙不能向这张卡转账。 持久性(耐用性):事务完成后,事务对数据库的所有更新都将保存到数据库中,无法回滚 3.事务的隔离级别有哪些? 数据库事务有四种隔离级别,从低到高分别是未提交读取(Read uncommitted)、已提交读取(Read committed)、可重复读取(Repeatable read)、可序列化(Serializable)。此外,事务的并发操作中可能会出现脏读、不可重复读、幽灵读等情况。事务并发问题 脏读:事务 A 读取事务 B 更新的数据,然后事务 B 回滚操作,那么事务 A 读取的数据就是脏数据。 不可重复读取:事务 A 多次读取同一数据,事务 B 在事务 A 多次读取期间更新并提交数据,导致事务 A 多次读取同一数据时结果不一致。 幻影读取:系统管理员 A 将数据库中所有学生的具体分数改为 ABCDE 等级,但系统管理员 B 在此时插入了具体分数的记录,当系统管理员 A 更改结束后发现仍有一条记录未被更改,仿佛发生了幻觉,这称为幻影读取。 小结:不可重复读和幻读容易混淆,不可重复读侧重于修改,幻读侧重于增删。解决不可重复读问题只需锁定满足条件的行,解决幻读问题则需要锁定表 MySQL 事务隔离级别
-
Oracle 数据库从入门到精通系列之 21:增加 Oracle 19c 数据库重做日志的大小 - I. 概述
-
哨兵 - 哨兵系列数据下载地址和流程更新 [202310] - ⛄ 哨兵数据下载流程
-
iCloud 切换区域,中国区保留 appStore(更新)--自 2018 年 2 月 28 日起,中国区 iCloud 由云上贵州管理 苹果公司发布的公告 https://support.apple.com/zh-cn/HT208352 关键词 关键部分 受影响的 iCloud 账户:国家或地区设置为 "中国 "的 Apple ID。 iCloud 包含的服务照片、邮件、通讯录、日历、提醒事项、备忘、书签、钱包、钥匙串、云备份、云驱动器、应用程序数据 新条款和条件: 同意仅出于本协议允许的目的并在中国法律允许的范围内使用服务。 云桂洲在提供服务时应使用合理的技能并尽职尽责,但在适用法律允许的最大范围内,我们不保证或担保您通过本服务存储或访问的任何内容不会意外损坏、崩溃、丢失或根据本协议的条款被删除,如果发生此类损坏、崩溃、丢失或删除,我们不承担任何责任。您应自行负责维护您的信息和数据的适当备份。 Apple 和云上贵州有权访问您存储在服务中的所有数据,包括有权根据适用法律相互之间共享、交换和披露所有用户数据(包括内容)。 本协议的解释、效力和履行应适用*法律。对于因本协议引起的或与本协议有关的任何争议,云桂洲和您同意提交中国国际经济贸易仲裁委员会(CIETAC)根据提交仲裁时有效的法律在北京进行具有约束力的仲裁。 由云桂洲管理,用户选择: 停用; ID 到地区; 受 iCloud(由云桂洲运营)条款和条件约束 首先,我想说说我对数据安全的看法。 当我在朋友圈发布通知时,有些朋友回复说国外的操作并没有多安全,或者国外的安全只是相对于国外而言的等等。首先,我非常感谢这些朋友,这让我反思什么是数据安全。以下观点均属个人观点: 国外的月亮一定比国内圆? 这是一个根深蒂固的问题,只要有人说国外的东西比国内好,就会有人嘲笑崇洋媚外。我觉得我们在某些方面应该向国外学习,比如搜索引擎和版权问题。打开百度搜索 "数据安全",第一行肯定是广告。打开谷歌搜索 "数据安全",第一条就是 "数据安全_百度百科" .....各种版权问题大家都明白,支持正版,但不仅客户一心想找免费破解,就连作者也往往没有保护自己劳动成果或产品的想法。但从另一个层面来说,国内的发展和安全,甩国外几条街。没有说哪里好,哪里不好,辩证地去学习更好。 国外也有别有用心的数据泄露,谈何安全? 从加密解密的角度看,自古以来就没有绝对安全的加密,只有相对安全的做法。苹果的棱镜门、微软的 cpu 漏洞,各种参差不齐的被破解案例 ....是的,这的确是一个很好的论据,但凡事都不能只看一面,当年苹果面对FBI破解手机的要求,几经论证,苹果还是拒绝破解。这点拿到国内,只要上面的文件传达下去,还有企业敢说不吗?还敢说不吗? 关于这次iCloud数据迁移个人看法? 把数据迁移到贵州的云端,相当于把手机的所有数据都存储在贵州的云端服务器上。也许访问数据的速度会快很多,但我会把我的iCloud区放到美国,因为我不想数据存在云上贵州后经常接到莫名其妙的电话或短信,更不想因为乱用国外服务器而被请去喝茶。iCloud一个ID,即从中国账号转到美国区,主要用于数据存在美国服务器上。appStore一个ID,除了注册一个中国ID外,专门用来下载应用用,因为国外ID不支持酷狗和网易云等应用。麻烦的是,用了新的 appStore ID 后,当前的应用还得重新下载安装,因为旧的应用 ID 与新的应用 ID 不兼容,安装不了。最后,iCloud迁移后,国内用户使用美国服务器,估计要 "扶墙 "了。 专业步骤: 首先,进行appleID设置,这是前提条件,否则无法选择转移区域! 取消 appleID 的双重认证 取消家庭共享选项 二、窗口下载并安装 icloud 3.0 版
-
GaussDB 数据库 SQL 系列 - 重复数据删除
-
2000-2024 年别克全系列维修手册及接线图信息已更新至汽车维修助手数据库平台。
-
微信小程序开发系列(二十)--wxml语法--setData修改对象类型数据,ES6提供扩展运算符、删除和其余用法
-
[Elasticsearch 系列之八]通过重新索引迁移 ES 数据
-
移动云加强全方位云网保护,守护数字中国发展 - 新增云安全中心涵盖终端安全,整合EDR的查杀、预警、应对及溯源功能,实现终端安全管理一体化。它能迅速定位并处理各类网络威胁,如病毒、入侵和新漏洞,减少人工应对负担。EDR在HVV行动中是关键防护,能在终端建立坚固防线,阻止威胁扩散,并协同其他产品追踪攻击链路。 态势感知全面覆盖监控、审计、运维、评估和预警等多个方面,针对混合云环境,提供统一业务安全管理、全面安全信息收集、智能安全事件关联分析以及系统性能与可用性的全面检测,满足等保标准、安全运营、数据保护和重要时期的保障需求。 云堡垒机推出全新混合云版本,支持混合云、私有云及客户自建平台部署,专为运维资源管理和审计提供安全保障。安全资源池行业版则针对于私有云和行业云,提供定制化的场景化安全合规整体解决方案,并可根据需要提供改造、统一管理、远程更新等一系列配套服务。 共同构建安全、便捷且高效的远程办公环境。
-
C#实用教程 - C# EF快速批量添加、更新与删除数据(第32讲)