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 命令可以取符合规则的…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
