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

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;

事务的四个特性:原子性,一致性,隔离性,持久性!

  1. 原子性(Atomicity)

          事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    
  2. 一致性(Consistency)

         事务前后数据的完整性必须保持一致。
    
  3. 隔离性(Isolation)

        了解:
    
  •     数据隔离的级别
    
  •     数据每个隔离级别在不同的数据库产品里面的默认值
    
  •     每个隔离级别所对应解决的问题(脏读,幻读,重复读...)
    
  •     工作中应该怎么去选择隔离级别多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离。
    
  1. 持久性(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相关 元组是不可变的数据类型,只能查询,不能修改&#xf…...

完成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团购拼购商城源码&#xff0c;带分销团购商城网站源码&#xff0c;很完美的一套基于ThinkPHP开发的团购分销商城源码&#xff0c;界面也很大气&#xff0c;站长亲测。有需要的可以借鉴一下。 下载地址&#xff1a;https://bbs.csdn.net/topics/613231434...

awvs 中低危漏洞

低危 X-Frame-Options Header未配置 查看请求头中是否存在X-Frame-Options Header字段 会话Cookie中缺少secure属性(未设置安全标志的Cookie) 当cookie设置为Secure标志时&#xff0c;它指示浏览器只能通过安全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 现在可以说是运用最广泛的编程语言之一&#xff0c;使用 Python 的人不只局限在计算机相关专业的从业者,很多来自金融领域、医疗领域以及其他我们无法想象的领域的人,每天都在使用 Python处理各种数据、使用机器学习进行预测以及完成各种有趣的工作。 长久以来&#xff…...

skywalking功能介绍

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

c++桥接模式,中介者模式应用实现状态跳转

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

【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Ribbon 一、 Ribbon负载均衡原理1.1 负载均…...

亘古难题——前端开发or后端开发

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

Notepad++提取含有特定字符串的行

ctrl M快捷键&#xff0c;进入"标记" 页面 标记所在行–循环查找-- 正则表达式 – 输入关键字 – 全部标记 – Copy Marked Text 关键字格式如下&#xff1a; .*关键字.*ctrl v&#xff0c;粘贴即可。...

host配置

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

```,```中间添加 # + 空格 + 空行后遇到的底部空行出错,书接上回,处理空行

【python查找替换&#xff1a;查找空行&#xff0c;空行前后添加&#xff0c;中间添加 # 空格 空行后遇到的第1行文字&#xff1f; - CSDN App】http://t.csdnimg.cn/QiKCV def is_blank(line):return len(line.strip()) 0txt 时间戳&#xff1a; ("%Y-%m-%d %H:%M:…...

Unity官方文档中关于内存管理的翻译(2021.3)

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

点云处理开发测试题目 完整解决方案

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

TensorRT的结构

Builder&#xff08;网络原数据&#xff09;&#xff1a;模型搭建的入口&#xff0c;网络的tensorRT内部表示以及可执行程序引擎都是由该对象的成员方法生成的 BuiderConfig&#xff08;网络原数据的选项&#xff09;&#xff1a;负责设置模型的一些参数&#xff0c;如是否开始…...

python对excel数据表进行数据清洗

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

95、Spring Data Redis 之使用RedisTemplate 实现自定义查询 及 Spring Data Redis 的样本查询

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

jdbc(DriverManager+Connection+Statement+ResultSet)+SQL注入+开启预编译+数据连接池

1 JDBC概念 JDBC 就是使用Java连接并操作数据库的一套API 全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接 2 JDBC优势 可随时替换底层数据库&#xff0c;访问数据库的Java代码基本不变 以后编写操作数据库的代码只需要面向JDBC&#xff08;接口&#xf…...

NoSQL之 Redis命令工具及常用命令

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

多线程(线程互斥)

抢票代码编写 学习了前面有关线程库的操作后&#xff0c;我们就可以模拟抢票的过程 假设我们创建四个线程&#xff0c;分别代表我们的用户 然后设定总票数为1000张&#xff0c;四个线程分别将进行循环抢票操作&#xff0c;其实就是循环对票数进行打印&#xff0c;并进行对应的…...

使用 html2canvas 和 jspdf 将页面转 pdf,同时解决当页面过长时,页面白屏问题

代码如下&#xff0c;直接粘贴复制即可&#xff0c;代码中 jspdf 是全局引入&#xff0c;你可以自己局部引入 别人使用标签的方式来显示 base64&#xff0c;但是当页面过长时&#xff0c;base64 大小过大会导致页面解析异常&#xff0c;显示白屏 import html2canvas from html2…...

【Python 千题 —— 基础篇】今年几岁啦

题目描述 题目描述 介绍自己的年龄。请使用 input 函数读入一个整数&#xff0c;表示自己的年龄&#xff0c;然后程序将自动生成介绍自己年龄的英文语句。 输入描述 输入一个整数&#xff0c;表示自己的年龄。 输出描述 程序将生成一个英文语句&#xff0c;以介绍自己的年…...

git push 失败 shallow update not allowed

问题描述&#xff1a; ~/OK62xx-linux-sdk/OK62xx-linux-kernel$ git push origin master Counting objects: 83919, done. Delta compression using up to 144 threads. Compressing objects: 100% (75697/75697), done. Writing objects: 100% (83919/83919), 232.41 MiB | …...

uniapp 在uni.scss 根据@mixin定义方法 、通过@include全局使用

在官方文档中提及到uni.scss中变量的使用&#xff0c;而我想定义方法&#xff0c;这样写css样式更方便 一、官方文档的介绍 根据官方文档我知道&#xff0c;在这面定义的变量全局都可使用。接下来我要在这里定义方法。 二、在uni.scss文件中定义方法 我在uni.scss文件中定义了…...

C++ 类和对象(一)

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完 成。 …...

rust函数

一 、函数定义 &#xff08;一&#xff09;格式 使用fn关键字 fn是 function 的缩写 1.无返回值的 fn 函数名 ( [paraname: type]... ) {函数体 }参数必须声明参数名称和类型 函数定义时指定的参数叫做 形参。调用时传递给函数的参数叫做 实参。 例子 fn another_function(…...

链表的基本操作

&#xff08;一&#xff09;实验类型&#xff1a;设计性 &#xff08;二&#xff09;实验目的&#xff1a; 1. 掌握线性表的链式存贮结构及基本操作&#xff0c;深入了解链表的基本特性&#xff0c;以便在实际问题背景下灵活运用它们。 2. 巩固该存贮结构的构造方法&#xff0…...

Flutter AI五子棋

前言 在上一篇文章中&#xff0c;讲解了如何实现双人在本地对战的五子棋&#xff0c;但是只有一个人的时候就不太好玩&#xff0c;同时博主也没有把五子棋相关的文章写过瘾。那么这篇文章&#xff0c;我们来实现一个功能更加丰富的五子棋吧&#xff01;在设计五子棋的算法方面&…...

springboot项目中后台文件上传处理

参考地址:http://www.gxcode.top/code 文件上次核心处理代码: @Autowired private FileUpload fileUpload; //获取资源对象:file-upload-prod.properties@ApiOperation(value = "用户头像修改", notes = "用户头像修改", httpMethod =...