3.python操作mysql数据库

前言:在现代应用程序中,数据库扮演者至关重要的角色。mysql是一个流行的关系型数据库管理系统,广泛应用于各种规模的应用中。在pytho中,我们可以通过连接库与mysql数据库进行交互,实现数据的增删改查操作。与此同时,为了提高应有的性能,连接池作为一个优化数据库连接管理技术,得到了广泛的应用

一:安装Python MySQL连接库

用于与mysql数据库进行交互

1:安装mysql-connector-python

pip install mysql-connector-python

2:安装pymysql(作为代替)

pip install pymysql

二:python连接mysql数据库

vim aaa.py

import pymysql                                                                   /1

db = pymysql.connect(host="192.168.10.101",user="root",password="pwd123",database="testdb")  /2

cursor = db.cursor()                                                             /3

cursor.execute("select * from users")                                  /4

results = cursor.fetchall()
for row in results:
         print(row)                                                                       /5

cursor.close()
db.close()                                                                                /6
以上五个部分解释:

1:导入数据库,需要导入pymysql模块,使用它来连接mysql数据库并执行sql语句

2:创建数据库连接,pymysql.connect()方法来建立数据库连接。连接时需要提供mysql服务器的地址、用户名、密码和我们要访问的数据库名

3:创建游标对象,建立连接之后,需要创建一个游标对象,通过它来执行sql语句

4:执行sql语句,通过游标对象的execute()方法,我们可以执行sql语句,在执行sql语句时,可以使用%s占位符来避免sql注入攻击

5:获取查询结果,对于查询操作,fetchall()方法用于获取所有结果,fetchone()方法用于获取单条记录

6:关闭连接:操作完成后,需要关闭游标和数据库连接

三:常见的mysql操作

1:插入数据(INSERT)

插入数据时,我们使用insert into语句,通过execute()方法执行插入操作。为了防止SQL注入攻击,插入语句中的值应使用%s占位符

cursor.execute("insert into users (name,age) values (%s,%s)",("Alice",25))

db.commit()                         /提交事务,保存插入数据

2:更新数据(UPDATE)

更新数据时,使用update语句,通过execute()方法执行,通常会添加where条件,以确保只更新需要更新的记录

cursor.execute("update users set age=%s where name = %s",(26,"Alice"))

db.commit()   

3:删除数据(DELETE)

删除数据时,使用delete语句,并通过where条件确保删除特定记录

cursor.execute("delete from users where name =%s",("Alice",))

db.commit()   

4:查询数据(SELECT)

查询数据时,使用select语句。可以使用fetchall()获取所有记录,或使用fetchone()获取一条记录

cursor.execute("select * from users")

results=cursor.fetchall()

for row in results:

     print(row)

5:执行多条sql语句

对于批量插入、更新等操作,可以使用executemany()方法一次执行多条sql语句

cursor.executemany("insert into user (name,age) values (%s,%s)",[ ("Bob",30),("charlie",35)] )

db.commit()

6:使用LIKE进行模糊查询

LIKE关键字允许你进行模糊查询。可以使用%通配符来匹配任意字符

cursor.execute("select * from users where name like %s",("%a%",))

results=cursor.fetchall()

for row in results:

        print(row)

7:使用JOIN进行联合查询

在多个表之间建立关系时,JOIN关键字用于合并多个表的数据

cursor.execute(""" select users.name,orders.amount from users inner join orders on users.id=orders.user_id """)

results=cursor.fetchall()

for row in results:

     print(row)

四:使用连接池

1:连接池简介

连接池技术能够在高并发场景下提升数据库连接的效率,在连接池中,多个数据库连接被提前创建并放入池中,客户端通过池获取连接,而不是每次都建立新的连接。这大大减少了连接和销毁的开销

2:创建连接迟

pymysql并不直接支持连接池,但我们可以使用DBUtils库莱创建连接池。首先需要安装DButils:

pip install dbutils

from dbutils.pooled_db import pooledDB

import pymysql

dbconfig= {                                       

        "host":"localhost",

        "user":"root",

        "password":"pwd123",

        "database":"testdb"

        }                                                     /数据库连接配置

connection_pool=PooledDB(

        creator=pymysql,                           /使用pymysql作为数据库连接库

        maxconnections=5,                       /连接池中最大连接数

        **dbconfig

)

3:获取连接

从连接池中获取连接时,可以使用connection()方法。每次获取到的连接都可以直接执行数据库操作

db_connection=connection_pool.connection()

cursor=db_connection.cursor()

cursor.exesute("select *  from users")

results=cursor.fetchall()

for row in results:

     print(row)

cursor.close()

db_connection.close()                          /连接会自动归还给连接池

4:连接池的优势

性能提升:连接池减少了每次数据库操作时创建新连接的开销,提高了数据库操作的效率

资源管理:连接池能够限制最大连接数,避免因过多的数据库连接导致数据库过载

更易管理:通过连接池,可以统一管理连接的生命周期,简化代码结构

五:事务管理

事务是由多个sql语句组成的一个工作单元。事务保证了数据的原子性,即所有操作要么都成功,要么都失败

1:开始事务

事务可以通过start transaction来显式开启,但一般我们通过执行sql语句来启动事务

cursor.execute("start transaction")

2:提交事务

如果事务中的所有操作都成功,我们使用commit()方式提交事务,保存对数据库的更改

db.commit()

3:回滚事务

如果事务中的某些操作失败,我们可以使用rollback()方法回滚事务,将所有更改撤销

db.rollback()

4:事务的隔离级别

mysql支持四种事务隔离级别,它们定义了在并发事务执行时一个事务的操作对于其他事务的影响

隔离级别的设置越高,事务间的干扰越小,但同时可能导致性能下降。mysql的默认隔离级别是repeatable read,具体如下;

(1)READ UNCOMMITTED(未提交读)

描述:事务可以读取其他事务未提交的数据,可能导致“脏读”(Dirty Read)。这种级别下,事务间的隔离性最差。
应用场景:通常不推荐使用,除非对数据一致性要求不高。

使用方法:

cursor.execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" )

(2)READ COMMITTED(提交读)

描述:事务只能读取其他事务已经提交的数据,避免了脏读,但仍然可能遇到“不可重复读”(Non-repeatable Read)的问题。即事务中读取的数据在两次读取时可能发生变化(另个事务已提交了修改)。
应用场景:适用于大多数常见场景,提供了一定的隔离性,同时保证了较好的性能。
使用方法:

cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")

(3)REPEATABLE READ(可重复读)

描述:事务可以保证在事务内多次读取同一数据时,其值不会发生变化。这避免了“不可重复读”的问题,但依然可能会出现“幻读”(Phantom Read),即一个事务读取的数据集在事务执行过程中发生了变化。
应用场景:对于需要保证事务数据一致性的场景,例如金融系统中的余额操作等,可以考虑使用该隔离级别。
使用方法:

Cursor.execute("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ" )

(4)SERIALIZABLE(串行化)

描述:这是最严格的事务隔离级别,事务会被执行得像串行一样,完全避免了脏读、不可重复读和幻读。然而,这种隔离级别的性能开销最大,可能导致大量的锁竞争。
应用场景:适用于对数据一致性要求极高的场景,如库存管理系统、银行转账等。

使用方法:

cursor.execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")

5:事务隔离级别总结

READ UNCOMMITTED:允许脏读,最低的隔离级别,性能最好,但容易出现数据不一致的情况。READ COMMITTED:解决了脏读问题,但可能出现不可重复读。
REPEATABLE READ:解决了脏读和不可重复读问题,但可能出现幻读,
SERIALIZABLE:解决了所有问题,但性能最差,可能导致事务长时间等待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day023-网络基础与OSI七层模型

文章目录 1. 网络基础知识点1.1 网络中的单位1.2 查看实时网速:iftop1.3 交换机、路由器 2. 路由表2.1 查看路由表的命令2.2 路由追踪命令 3. 通用网站网络架构4. 局域网上网原理-NAT5. 虚拟机上网原理6. 虚拟机的网络模式6.1 NAT模式6.2 桥接模式6.3 仅主机模式 7.…

DeepSeek智能对话助手项目

目录: 1、效果图2、实现代码3、温度和TopK的作用对比 1、效果图 2、实现代码 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…

视觉中国:镜头下的中国发展图景

2025年5月下旬,从北国草原到江南水乡,从文化遗产到科技创新,中国大地上演着一幕幕生机勃勃的图景。河北张家口的沙狐幼崽与湿地生态和谐共生,湖北襄阳的茶园雕琢出诗意田园;北京殷商文创的活力、沈阳文物情景剧的创意&…

LabVIEW 中内存释放相关问题

在LabVIEW 编程领域,内存管理是一个关键且复杂的议题。我们常常关注 LabVIEW 如何将内存释放回操作系统(OS),以及是否有方法确保在特定数据结构(如队列、变体属性、动态数据引用 DVR 等)销毁、删除或清空后…

基于正点原子阿波罗F429开发板的LWIP应用(4)——HTTP Server功能

说在开头 正点原子F429开发板主芯片采用的是STM32F429IGT6,网络PHY芯片采用的是LAN8720A(V1)和YT8512C(V2),采用的是RMII连接,PHY_ADDR为0;在代码中将会对不同的芯片做出适配。 CubeMX版本:6.6.1; F4芯片组…

设计模式-结构型模式(详解)

适配器模式 将一个类的接口转换成客户端期望的另一个接口,解决接口不兼容问题。 适配器模式由四部分组成: 客户端:即需要使用目标接口的类 目标接口 需要适配的类,也就是已经存在好的功能,但客户端通过目标接口没办…

银河麒麟操作系统下载

产品试用申请国产操作系统、麒麟操作系统——麒麟软件官方网站 下载页面链接如上,申请试用即可。 申请试用填写后提交,界面就变成了这样,可以挑选适合自己的版本。 海思麒麟9006C版,如下: 本地下载:Kylin…

[CARLA系列--03]如何打包生成CARLA 0.9.15的非编辑版(地图的加载与卸载)

前两篇文章介绍了如何去安装可编辑版的CARLA 0.9.15,这个完整的工程文件实在是太大了,大概消耗了100个G的磁盘空间,当在进行一个CARLA项目的时候,不利于在每个开发电脑都去安装部署一套CARLA 0.9.15的源码,所以把自己这…

【机器学习基础】机器学习入门核心算法:朴素贝叶斯(Naive Bayes)

机器学习入门核心算法:朴素贝叶斯(Naive Bayes)) 一、算法逻辑1.1 基本概念1.2 基本流程 二、算法原理与数学推导2.1 贝叶斯定理2.2 朴素贝叶斯分类器2.3 不同分布假设下的概率计算2.3.1 高斯朴素贝叶斯(连续特征&…

云服务器系统盘满了,但是其他正常,是否可能是被攻击了

目录 问题背景分析解决系统盘满的问题解决结果 问题背景 今天登录我的云服务器看了眼,发现系统盘满了,但是其他正常 分析 1、首先要确认是否是被攻击: top / htop (安装:yum install htop 或 apt install htop):…

双因子COX 交互 共线性 -spss

SPSS 简要界面操作步骤(针对双因子 COX 分析) 1. 数据准备 变量格式:确保数据已整理为以下格式(示例): 时间变量(如 Time_to_Recurrence)结局变量(如 Recurrence:1=复发,0=未复发)预测变量(CSPG4_HSCORE、FAM49B_Status 二分类变量)协变量(如 Lesion_Size、Pat…

【MySQL】第12节|MySQL 8.0 主从复制原理分析与实战(二)

一、组复制(MGR)核心概念 1. 定义与定位 目标:解决传统主从复制的单点故障、数据不一致问题,提供高可用、高扩展的分布式数据库方案。基于 GTID:依赖全局事务标识符(GTID)实现事务一致性&…

React 泛型组件:用TS来打造灵活的组件。

文章目录 前言一、什么是泛型组件?二、为什么需要泛型组件?三、如何在 React 中定义泛型组件?基础泛型组件示例使用泛型组件 四、泛型组件的高级用法带默认类型的泛型组件多个泛型参数 五、泛型组件的实际应用场景数据展示组件表单组件状态管…

如何手搓一个查询天气的mcp server

环境配置烦请移步上一篇博客 这里直接步入主题,天气查询的api用的是openweather,免费注册就可以使用了 每天1000次内使用时免费的,大概的api 如下 https://api.openweathermap.org/data/2.5/weather?qBeijing,cn&APPID注册后可以拿到一个…

深入解析计算机网络核心协议:ARP、DHCP、DNS与HTTP

文章目录 一、ARP(地址解析协议)1.1 定义与功能1.2 工作原理1.3 应用场景1.4 安全风险与防御 二、DHCP(动态主机配置协议)2.1 定义与功能2.2 工作原理2.3 应用场景2.4 优缺点与安全建议 三、DNS(域名系统)3…

《Java 单例模式:从类加载机制到高并发设计的深度技术剖析》

【作者简介】“琢磨先生”--资深系统架构师、985高校计算机硕士,长期从事大中型软件开发和技术研究,每天分享Java硬核知识和主流工程技术,欢迎点赞收藏! 一、单例模式的核心概念与设计目标 在软件开发中,我们经常会遇…

NL2SQL代表,Vanna

Vanna 核心功能、应用场景与技术特性详解 一、核心功能 1. 自然语言转SQL查询 Vanna 允许用户通过自然语言提问(如“显示2024年销售额最高的产品”),自动生成符合数据库规范的SQL查询语句。其底层采用 RAG(检索增强生成&#xf…

【动态规划】子数组系列(二)

📝前言说明: 本专栏主要记录本人的动态规划算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;&…

68元开发板,开启智能硬件新篇章——明远智睿SSD2351深度解析

在智能硬件开发领域,开发板的选择至关重要。它不仅关系到项目的开发效率,还直接影响到最终产品的性能与稳定性。而今天,我要为大家介绍的这款明远智睿SSD2351开发板,仅需68元,却拥有远超同价位产品的性能与功能&#x…

篇章六 数据结构——链表(二)

目录 1. LinkedList的模拟实现 1.1 双向链表结构图​编辑 1.2 三个简单方法的实现 1.3 头插法 1.4 尾插法 1.5 中间插入 1.6 删除 key 1.7 删除所有key 1.8 clear 2.LinkedList的使用 2.1 什么是LinkedList 5.2 LinkedList的使用 1.LinkedList的构造 2. LinkedList的…