一,安装pythonMySQL链接库
Python有多个MySQL连接库可供选择,以下是主流的三种:
- mysql-connector-python - MySQL官方提供的纯Python实现
- PyMySQL - 纯Python实现的MySQL客户端
- 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,连接池的优势
-
性能提升:避免了频繁创建和销毁连接的开销,通常数据库连接的建立需要100ms以上。
-
资源控制:可以限制最大连接数,防止系统过载。例如设置最大连接数为100。
-
连接复用:同一个连接可以被多个请求循环使用,提高了资源利用率。
-
统一管理:集中处理连接问题,如超时重连、心跳检测等。
五,事务管理
事务管理是数据库系统和分布式计算中的核心概念,它确保一组操作要么全部成功执行,要么全部不执行,从而维护数据的完整性和一致性。事务管理在现代企业应用中扮演着至关重要的角色,特别是在金融交易、电子商务和关键业务系统中。
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()