python之数据库操作详解
一般来说,我们对数据库里的操作需要先连接,创建游标对象,然后通过游标对象执行SQL语句去对SQL的数据进行操作,本篇文章旨在记录与科普。
1.cursor相关
元组是不可变的数据类型,只能查询,不能修改,删除,新增。元组是根据索引进行取值,在实际开发的过程中一般不使用默认的元组的形式,因为索引的值取决于数据库字段的顺序,在实际的开发过程中字段的顺序是易变(比如增加了一个字段)索引就会发生改变。
更多采用列表+字典的形式
con = pymysql.connect(host="127.0.0.1", port=3306,user="root", password='123456',database="test", charset='utf8')#创建游标对象
cur = con.cursor()#通过游标执行SQL语句
cur.execute("SELECT * from zt_config")print(cur.fetchall())#配置游标对象以列表嵌套字典的形式返回数据
cur = con.cursor(cursor=DictCursor)#通过游标执行SQL语句
cur.execute("SELECT * from zt_config")#fetchall也就是一次性获取所有数据
print(cur.fetchall())
2.切换数据库操作
con = pymysql.connect(host="127.0.0.1", port=3306,user="root", password='123456',database="test", charset='utf8')#配置游标对象以列表嵌套字典的形式返回数据
cur = con.cursor(cursor=DictCursor)#通过游标执行SQL语句
cur.execute("SELECT * from wyl_admin")#fetchall也就是一次性获取所有数据
print(cur.fetchall())#切换数据的操作,使用连接对象里面的select_db进行操作
con.select_db("stu")#通过游标执行SQL语句
cur.execute("SELECT * from stu")
#fetchall也就是一次性获取所有数据
print(cur.fetchall())
3.连接方式
在这里,首先要想到open与with这两个命令的不同:
- 使用with不需要手动的关闭连接
- 使用with也是pymysql官方推荐的方式
with pymysql.connect(host="127.0.0.1", port=3306,user="root", password='123456',database="test", charset='utf8') as db:with db.cursor(DictCursor) as cur:cur.execute("SELECT * from zt_config")print(cur.fetchall())
4.结果集处理
with pymysql.connect(host="127.0.0.1", port=3306,user="root", password='123456',database="zentao", charset='utf8') as db:with db.cursor(DictCursor) as cur:# cur.execute("SELECT * from zt_config")cur.execute('UPDATE zt_config set money = money-100 where `name` = "king";')#fetchone获取一条数据
#但是每次获取完之后再次执行会继续往后面获取
#print(cur.fetchone())
#print(cur.fetchone())
#print(cur.fetchone())#一次性获取所有的数据
#print(cur.fetchall())#fetchmany在什么都不传的情况下,和fetchone是一样的
#可以传值,值就是获取的条数
#print(cur.fetchmany(4))
#print(cur.fetchmany())
#print(cur.fetchmany())0
5.事务操作相关
在数据库里面什么叫做事务?事务就是一段连续的不可分割的sql语句,要么全部成功,要么全部失败。在实际的开发过程中:事务必不可少。
# 把king的钱借给jack100块
BEGIN;
#表示事务开启,接下来的所有的sql语句都作为一个事务#执行sql语句之后并不会直接修改数据库,而是把修改的操作存储在内存里面
UPDATE zt_config set money = money-100 where `name` = "king";
#操作
UPDATE zt_config set money = money+100 where `name` = "jack";#判断事务里面的sql执行没有问题才会继续提交,执行完commit之后数据库的数据才会发生改变
COMMIT;#执行完rollback之后表示整个事务失败,所有的操作全部还原
ROLLBACK;
事务的四个特性:原子性,一致性,隔离性,持久性!
-
原子性(Atomicity)
事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
-
一致性(Consistency)
事务前后数据的完整性必须保持一致。
-
隔离性(Isolation)
了解:
-
数据隔离的级别
-
数据每个隔离级别在不同的数据库产品里面的默认值
-
每个隔离级别所对应解决的问题(脏读,幻读,重复读...)
-
工作中应该怎么去选择隔离级别多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离。
-
持久性(Durability)
一个事务一旦被提交,它对数据库中的数据改变就是永久性的。
例子:
# 在pymysql里面的事务操作 面向过程
with pymysql.connect(host="127.0.0.1", port=3306,user="root", password='123456',database="zentao", charset='utf8') as db:with db.cursor(DictCursor) as cur:db.begin() # 连接对象.begin() 表示开启事务try:cur.execute('UPDATE zt_config set money = money-100 where `name` = "king";')cur.execute('UPDATE zt_config set money = money+100 where `name` = "jack";')except Exception as e:db.rollback() # 回滚数据print(e)else:db.commit() # 提交数据
6.打包拆包相关(*args,**kwargs)
–打包
a.*args
args是一个特殊的参数,它允许你在函数调用时传递任意数量的位置参数。这些位置参数将会以元组的形式传递给函数。
在使用args时,你可以传递任何类型的参数,包括数字、字符串、列表、元组、甚至是自定义的对象等。
#计算四个数之和
def sum_test(a,b,c,d):return a + b + c + dprint(sum_test(1, 2, 3, 4))
问题来了,我也不知道要传入几个数。在不确定传入参数的情况,*args表示可以传入任意个数的参数,会把传入的参数 打包成一个元组,也叫做“不定长参数”。
def sum_test2(*args):print(args)return sum(args)print(sum_test2(1, 2, 3,4,5))
b.**kwargs
在不定长参数时,可以使用**kwargs。**kwagrs会把传入的参数打包成一个字典,但是传参方式必须是 “关键字传参”。args是一个特殊的参数,它允许你在函数调用时传递任意数量的位置参数。这些位置参数将会以元组的形式传递给函数。
在使用args时,你可以传递任何类型的参数,包括数字、字符串、列表、元组、甚至是自定义的对象等。
#**kwargs:不定长参数
def show_self(name,age):print(f'我的名字叫{name},我的年龄是{age}')show_self("jack",20)#不知道有几个参数
#**kwagrs会把传入的参数打包成一个字典,但是传参方式必须是 “关键字传参”
def show_self2(**kwargs):print(kwargs)print(f'我的名字叫{kwargs["name"]},我的年龄是{kwargs["age"]}')show_self2(name="jack",age=20,like="长条")
c.结合使用
def show(*args,**kwargs):print(args)print(kwargs)show(1,2,3,4,name="jack",a="b",ak="48")
–拆包
把在调用函数的时候传入的内容拆包,把元组/列表拆成一个个元素,把字典拆成关键字传参
def sum_test(a,b,c,d):return a + b + c + d#注意:参数的数量不能错tu = [1, 2, 3, 4,]
print(sum_test(*tu))def show_self(name,age):print(f'我的名字叫{name},我的年龄是{age}')#在拆包字典的时候需要注意,字典的键必须和形式参数的名字一样
dict1 = {"name":"jack","age":20}
show_self(**dict1)
相关文章:
python之数据库操作详解
一般来说,我们对数据库里的操作需要先连接,创建游标对象,然后通过游标对象执行SQL语句去对SQL的数据进行操作,本篇文章旨在记录与科普。 1.cursor相关 元组是不可变的数据类型,只能查询,不能修改…...
完成flex布局与float布局
一、flex布局 <style>.nav {display: flex;background-color: #f8f8f8; /* 导航栏背景颜色 */}.nav a {flex: 1;display: flex;align-items: center;justify-content: center;padding: 14px 16px;text-decoration: none;color: #555555; /* 导航栏文字颜色 */}.nav a:ho…...

ThinkPHP团购拼购商城源码/带分销团购商城网站源码/完美版
ThinkPHP团购拼购商城源码,带分销团购商城网站源码,很完美的一套基于ThinkPHP开发的团购分销商城源码,界面也很大气,站长亲测。有需要的可以借鉴一下。 下载地址:https://bbs.csdn.net/topics/613231434...

awvs 中低危漏洞
低危 X-Frame-Options Header未配置 查看请求头中是否存在X-Frame-Options Header字段 会话Cookie中缺少secure属性(未设置安全标志的Cookie) 当cookie设置为Secure标志时,它指示浏览器只能通过安全SSL/TLS通道访问cookie。 未设置HttpOnly标志的Cookie 当cookie设置…...

openGauss学习笔记-95 openGauss 数据库管理-访问外部数据库-postgres_fdw
文章目录 openGauss学习笔记-95 openGauss 数据库管理-访问外部数据库-postgres_fdw95.1 使用postgres_fdw95.2 postgres_fdw下推主要成分95.3 常见问题95.4 注意事项 openGauss学习笔记-95 openGauss 数据库管理-访问外部数据库-postgres_fdw openGauss的fdw实现的功能是各个…...

并不止于表面理论和简单示例——《Python数据科学项目实战》
Python 现在可以说是运用最广泛的编程语言之一,使用 Python 的人不只局限在计算机相关专业的从业者,很多来自金融领域、医疗领域以及其他我们无法想象的领域的人,每天都在使用 Python处理各种数据、使用机器学习进行预测以及完成各种有趣的工作。 长久以来ÿ…...

skywalking功能介绍
目标 前置:性能监控-微服务链路追踪skywalking搭建-CSDN博客 使用skywalking进行链路监控,找到应用的时间消耗再哪。 服务 服务信息 请求接口后查看skywalking,可以看到有一个请求,响应时间为1852ms,性能指数Apdex…...

c++桥接模式,中介者模式应用实现状态跳转
上图为例,按上述两种方式实现的模式跳转,如果在原先的三种模式之间再增加多一种模式,就会引起每个模式都会要求改变,并且逻辑混乱,因此更改模式为桥接中介者访问,将抽象和实现分离,实现之间采用…...

【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Ribbon 一、 Ribbon负载均衡原理1.1 负载均…...

亘古难题——前端开发or后端开发
一、引言 前端开发 前端开发是创建WEB页面或APP等前端界面呈现给用户的过程,通过HTML,CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互。 前端开发从网页制作演变而来,名称上有很明显的时…...

Notepad++提取含有特定字符串的行
ctrl M快捷键,进入"标记" 页面 标记所在行–循环查找-- 正则表达式 – 输入关键字 – 全部标记 – Copy Marked Text 关键字格式如下: .*关键字.*ctrl v,粘贴即可。...

host配置
配置host文件的作用主要是用于自定义域名与IP地址之间的映射关系。Host文件是一个操作系统用于将人类可读的域名(例如:www.example.com)映射到IP地址(例如:192.168.1.1)的文件。当你在浏览器中输入一个网址…...

```,```中间添加 # + 空格 + 空行后遇到的底部空行出错,书接上回,处理空行
【python查找替换:查找空行,空行前后添加,中间添加 # 空格 空行后遇到的第1行文字? - CSDN App】http://t.csdnimg.cn/QiKCV def is_blank(line):return len(line.strip()) 0txt 时间戳: ("%Y-%m-%d %H:%M:…...

Unity官方文档中关于内存管理的翻译(2021.3)
原文:Memory in Unity - Unity 手册 Unity内存管理 为了确保您的应用程序运行时没有性能问题,了解Unity如何使用和分配内存非常重要。本文档的这一部分解释了Unity中内存是如何工作的,适用于希望了解如何提高应用程序内存性能的读者。 Unity使用三个内…...

点云处理开发测试题目 完整解决方案
点云处理开发测试题目 文件夹中有一个场景的三块点云数据,单位mm。是一个桌子上放了一个纸箱,纸箱上有四个圆孔。需要做的内容是: 1. 绘制出最小外接立方体,得到纸箱的长宽高值。注意高度计算是纸箱平面到桌子平面的距离。 2. 计算出纸箱上的四个圆的圆心坐标和半径,对圆…...

TensorRT的结构
Builder(网络原数据):模型搭建的入口,网络的tensorRT内部表示以及可执行程序引擎都是由该对象的成员方法生成的 BuiderConfig(网络原数据的选项):负责设置模型的一些参数,如是否开始…...

python对excel数据表进行数据清洗
当拿到excel表,使用python对excel操作前,第一件事情是对excel表的数据进行数据清洗。 数值是否有空值,是否有重复的数据,把以上2个问题解决完成以后,才是对数据真正操作的开始。 1、使用pandans读取数据 2、判断exce…...

95、Spring Data Redis 之使用RedisTemplate 实现自定义查询 及 Spring Data Redis 的样本查询
Spring Data Redis 之使用RedisTemplate 实现自定义查询 Book实体类 原本的接口,再继承我们自定义的接口 自定义查询接口----CustomBookDao 实现类:CustomBookDaoImpl 1、自定义添加hash对象的方法 2、自定义查询价格高于某个点的Book对象 测试&a…...

jdbc(DriverManager+Connection+Statement+ResultSet)+SQL注入+开启预编译+数据连接池
1 JDBC概念 JDBC 就是使用Java连接并操作数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库连接 2 JDBC优势 可随时替换底层数据库,访问数据库的Java代码基本不变 以后编写操作数据库的代码只需要面向JDBC(接口…...

NoSQL之 Redis命令工具及常用命令
目录 1 Redis 命令工具 1.1 redis-cli 命令行工具 1.2 redis-benchmark 测试工具 2 Redis 数据库常用命令 2.1 set:存放数据,命令格式为 set key value 2.2 get:获取数据,命令格式为 get key 2.3 keys 命令可以取符合规则的…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...