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

python操作MySQL数据库

一,安装pythonMySQL链接库

Python有多个MySQL连接库可供选择,以下是主流的三种:

  1. mysql-connector-python - MySQL官方提供的纯Python实现
  2. PyMySQL - 纯Python实现的MySQL客户端
  3. MySQLdb - C语言实现的传统连接库(仅支持Python2/Python3)

1,安装mysql-connector-python

pip3 install mysql-connector-python

2,安装pymysql(作为替代)

pip3 install pymysql

二,python连接MySQL数据库

1,导入链接库

import pymysql

2,创建数据库连接

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

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

3,创建游标对象

cursor=db.cursor()

4,执行SQL语句

cursor.execute("select * from users")

5,获取查询结果

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

6,关闭连接

cursor.close()
db.close()

三,常见的MySQL操作

1,插入数据

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

2,更新数据

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

3,删除数据

cursor.execute("delete from users where name = %s",("alice",))
db.commit()

4,查询数据

cursor.execute("select * from users")
results=cursor.fetchall()
for row in results:
print(row)

5,使用like进行模糊查询

cursor.execute("select * from users where name like %s", ("%a%",))
results=cursor.fetchall()
for row in results:print(row)

6,使用join进行联合查询

cursor.execute("""
SELECT users.name,orders.amountFROM usersINNER JOIN orders ON users.id =orders.user id""")
results =cursor.fetchall()
for row in results:print(row)

四,使用连接池,

1,连接池简介

连接池(Connection Pool)是一种用于管理数据库连接的技术架构,它通过预先创建并维护一定数量的数据库连接,在应用程序需要时从池中获取连接,使用完毕后归还给池而不是直接关闭,从而实现连接的高效复用。

2,创建连接池

from dbutils.pooled_db import PooledDB
import pymysql
dbconfig={"host":"192.168.10.101","user":"root","password":"pwd123","database":"testdb"}
connection_pool=PooledDB(creator=pymysql,maxconnection=5,**dbconfig)

3,获取连接

db_connection=connection_pool.connection()
cursor=db_connection.cursor()
cursor.execute("select * from users")
results=cursor.fetchall()
for fow in results:
print(row)
cursor.close()
db_connection.close()

4,连接池的优势

  1. 性能提升:避免了频繁创建和销毁连接的开销,通常数据库连接的建立需要100ms以上。

  2. 资源控制:可以限制最大连接数,防止系统过载。例如设置最大连接数为100。

  3. 连接复用:同一个连接可以被多个请求循环使用,提高了资源利用率。

  4. 统一管理:集中处理连接问题,如超时重连、心跳检测等。

五,事务管理

事务管理是数据库系统和分布式计算中的核心概念,它确保一组操作要么全部成功执行,要么全部不执行,从而维护数据的完整性和一致性。事务管理在现代企业应用中扮演着至关重要的角色,特别是在金融交易、电子商务和关键业务系统中。

1,开始事务

cursor.execute("start transaction")

2,提交事务

db.commit()

3,回滚事务

db.rollback()

4,事务的隔离级别

(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 uncommitted")

(3)REPEATABLE READ(可重复读)

确保在同一事务中多次读取同样数据结果一致。

  • 问题:可能导致"幻读"(Phantom Read)
cursor.execute("set transaction isolation level repeatable read,")

(4)SETIALIZABLE(串行化)

最高隔离级别,完全串行执行事务。

  • 优点:避免所有并发问题
  • 缺点:性能最低
cursor.execute("set transaction isolation level sertaltzable")

5,事务隔离级别总结

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

在选择事务隔高级别时,需要根据应用的具体需求平衡数据一致性和性能。如果事务数据不频繁冲突可以选择较低的隔离级别以提升性能,而对于数据一致性要求极高的场景,则应选择更高的隔离级别,尽管这会带来性能上的损失。
在MySQ中,事务的认隔离级别是REPEATABLE READ

6,案例

import pymysq1
conn = pymysql.connect("host":"192.168.10.101","user":"root","password":"pwd123","database":"testdb")
cursor=conn.cursor()
conn.autocomit= False
try:
cursor.execute("INSERT INTO users(name, age)VALUES('Eve',22)”)cursor.execute("INSERT INTO orders (user id, amount)VALUES((SELECT id FROM users WHERE name='Eve'),120.50)")
conn .commit()
print(“事务已提交。”)
except pymysql.MySQLError as err:
print(f"错误:{err}”)conn.rollback()
print(“事务已回滚。")
finally :
cursor.close()
conn.close()

http://www.xdnf.cn/news/8669.html

相关文章:

  • 再论自然数全加和-4
  • laravel中模型中$fillable的用法
  • DeepSeek-R1 模型现已在亚马逊云科技上推出
  • 再谈Linux进程:进程等待、进程替换与环境变量
  • 第七章:组件之城 · 重构世界的拼图术
  • RabbitMQ 快速上手
  • 【RichTextEditor】 【分析2】RichTextEditor设置文字内容背景色
  • 第八章:数据库查询优化
  • 上升沿计数 stm32 中断
  • 用service 和 SCAN实现sqlplus/jdbc连接Oracle 11g RAC时负载均衡
  • 在Mac中使用pyenv管理Python版本:从安装到虚拟环境的全流程指南
  • 物联网网关保障沼气发电站安全运行的关键技术解析
  • 文章记单词 | 第111篇(六级)
  • 江科大ADC模数转换hal库实现
  • C++构造函数和析构函数
  • 静态库的使用方法
  • BaseDao指南
  • 生成模型——变分自动编码器(Variational Autoencoders, VAEs)
  • 项目管理进阶:111页 详解华为业务变革框架及战略级项目管理【附全文阅读】
  • LaTeX学习路线
  • 63. 不同路径 II
  • 2.2.1 05年T1复习
  • 1.2 TypeScript 与 JavaScript 的区别
  • Java:堆排序
  • Git教程
  • 龙虎榜——20250523
  • 地形生成原理与实现
  • 【Java】Java元注解
  • 【操作系统】-4.1.8文件共享
  • Unitree 5. GO1 3D打印配件