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

python操作mysql数据库

目录

安装pyhonm mysql连接库

安装mysql-connector-python

安装pymysql(作为替代)

导入连接库

创建数据库连接

创建sql语句

获取查询结果

关闭连接

常见的mysql操作

插入数据(INSERT)

更新数据(UPDATE)

删除数据(SELECT)

执行多条SQL语句

使用JOIN进行联合查询

使用连接池

连接池介绍

创建连接池

获取连接

连接池的优势

事务管理

开始事务

提交事务

回滚事务

事务的隔离级别

READUNCOMMITTED(未提交读)

READ COMMITTED(提交读)

REPEATABLE READ(可重复读)

SERIALIZABLE(串行化)

事务隔离级别总结

案例


安装pyhonm mysql连接库

在开始之前,我们需要安装Python MySQL连接库。mysql-connector-python是一个官方推荐的库,用于与MySQL数据库进行交互。如果你更习惯使用其他库,PyMySQL也可以作为替代方案。

安装mysql-connector-python

pip3 install mysql-connector-python

安装pymysql(作为替代)

pip3 install pymysql

导入连接库

import pymysql

创建数据库连接

db = pymysql.connect(
host="localhost",
user="root",
password="password",
database="testdb
)

创建游标对象

cursor = db.cursor()

                执行sql语句

cursor.execute("SELECT * FROM users")

获取查询结果

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

关闭连接

cursor.close
db.close

插入数据(INSERT)

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

cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Alice", 25))
db.commit()#提交事务,保存插入的数据

常见的mysql操作

更新数据(UPDATE)

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

cursor.execute
("UPDATE users SET age = %s WHERE name = %s", (26,"Alice"))
db.commit()#提交事务,保存更新的数据

删除数据(SELECT)

删除数据时,我们使用DELETE语句,并通过WHERE条件确保删除特定记录

cursor.execute("DELETE FROM users WHERE name = %s", ("Alice",))
db.commit()#提交事务,保存删除的数据

                查询数据(SELECT)

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

cursor.execute("SELECT
FROM users
results = cursor.fetchall()
for row in results:
print(row)

执行多条SQL语句

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

cursor.executemany(
"INSERT INTO users (name, age) VALUES (%s, %s)",
[("Bob",30),("Charlie", 35),("David", 28)]
)
db.commit()#提交事务

使用LIKE进行模糊查询

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

cursor.execute("SELECT * FROM users WHERE name LIKE %s", ("%a%",))
results = cursor.fetchall()
for row in results:
print(row)

                使用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)

使用连接池

连接池介绍

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

创建连接池

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

pip install dbutils
from dbutils.pooled db import PooledDB
import pymysql
dbconfig={
"host": "localhost",
user
root
password",
password"
database": "testdb"
}
connection_pool = PooledDB(
creator=pymysql,
"maxconnections=5,"
**dbconfig
)

获取连接

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

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

 连接池的优势
性能提升:连接池减少了每次数据库操作时创建新连接的开销,提高了数据库操作的效率。
资源管理:连接池能够限制最大连接数,避免因过多的数据库连接导到致数据库过载
更易管理:通过连接池,可以统一管理连接的生命周期,简化代码结构。

连接池的优势

性能提升:连接池减少了每次数据库操作时创建新连接的开销,提高高了数据库操作的效率资源管理:连接池能够限制最大连接数,避免因过多的数据库连接导致数据库过载
更易管理:通过连接池,可以统一管理连接的生命周期,简化代码结构。

事务管理

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

开始事务

事务可以通过START TRANSACTION来显式开启,但一般我们通过扶行SOL语句来启动事务。

cursor.execute("START TRANSACTION")

提交事务

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

db.commit()

回滚事务

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

db.rollback

事务的隔离级别

MySQL支持四种事务隔离级别,它们定义了在并发事务执行时一个事务的操作对于其他事务的影响隔离级别的设置越高,事务间的干扰越小,但同时可能导致性能下降。MySQL的默认隔离级别是REPEATABLE READ,具体如下:

READUNCOMMITTED(未提交读)

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

cursor.execute("SET TRANSACTION ISOLATION LEVELREAD UNCOMMITTED")

READ COMMITTED(提交读)

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

cursor.execute("SET TRANSACTION ISOLATION LEVELREPEATABLE READ")

REPEATABLE READ(可重复读)

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

cursor.execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

事务隔离级别总结

READ UNCOMMITTED:允许脏读,最低的隔离级别,性能最好,但但容易出现数据不一致的情况。READCOMMITTED:解决了脏读问题,但可能出现不可重复读。
REPEATABLE READ:解决了脏读和不可重复读问题,但可能出现幻读**
SERIALIZABLE:解决了所有问题,但性能最差,可能导致事务长时间间等待
在选择事务隔离级别时,需要根据应用的具体需求平衡数据一致生和性能。如果事务数据不频繁冲突可以选择较低的隔离级别以提升性能;而对于数据一致性要求极高的场景,则应选择更高的隔离级别,尽管这会带来性能上的损失。在MySQL中,事务的默认隔离级别是REPEATABLE READ

SERIALIZABLE(串行化)

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

cursor.execute("SET TRANSACTION ISOLATION LEVEL SEERIALIZABLE"

案例

import pymysql
conn
pymysql.connect(
host='localhost',
user='root',
password='password
database='testdb
cursor=conn.cursor
conn.autocommit = False
try
cursor.execute("INSERT INTO users (name, age)VALUES ('Eve', 22)")
("INSERT INTO orders (user_id, amount) VALUES ((SELECTid FROM use
cursor.execute
rs WHERE name =
"Eve"),120.50)")
conn.commit()
print("事务已提交")
except pymysql.MySQLError as err:
#如果发生错误,回滚事务
print(f"错误:{err}")
conn.rollback()
print("事务已回滚。")
finally:
#关闭游标和连接
cursor.close
conn.close()

相关文章:

  • R基于逻辑回归模型实现心脏病检测及SHAP值解释项目实战
  • Starrocks 怎么计算各个算子的统计信息
  • R语言科研编程-柱状图
  • DeepSeek 赋能医疗影像分析:从卷积神经网络到临床诊断效率革新
  • Spark 中,map和foreach的区别
  • 基于Spring boot+vue的中医养生系统的设计与实现(源码+论文+部署+安装+调试+售后)
  • STM32之看门狗(IWDG)
  • [CSS3]Flex布局
  • John the Ripper 入门指南:密码破解工具的正确打开方式
  • Cmake编译gflags过程记录和在QT中测试
  • Qt实战:自定义QTreeWidget搜索隐藏显示项功能 | 附完整源码
  • 轻量化开源方案——浅析PdfPatcher实际应用
  • 在单片机中如何在断电前将数据保存至DataFlash?
  • C++:整数奇偶排序
  • [特殊字符] 使用增量同步+MQ机制将用户数据同步到Elasticsearch
  • MATLAB 2023b 配电柜温度报警系统仿真
  • 【算法】:动态规划--背包问题
  • Spring AI 源码解析:Tool Calling链路调用流程及示例
  • 夏日旅行(广度优先搜索)
  • 嵌入式软件-如何做好一份技术文档?
  • html5网站开发书籍/东莞网站推广优化网站
  • 做网站用哪个电脑/外贸网站seo优化
  • 有企业信息的网站/网络营销推广策略有哪些
  • wamp 做网站发布/优化师培训
  • 芜湖网站建设海长卷发背影图/一年的百度指数
  • 安丘网站建设/深圳网站建设服务