在数据驱动的开发中,Python 与 MySQL 的结合是处理数据的常用方式。Python 凭借简洁的语法和丰富的库,能轻松实现与 MySQL 数据库的交互,完成数据的增删改查等操作。本文将详细介绍如何使用 Python 操作 MySQL 数据库,从环境搭建到实战案例,帮助你快速掌握这一技能。
一、环境准备与库安装
要实现 Python 操作 MySQL,首先需要安装相应的库。目前最常用的是mysql-connector-python和PyMySQL,两者功能类似,这里以PyMySQL为例进行讲解。
安装PyMySQL库的命令十分简单,使用 pip 即可:
bash
pip install pymysql
安装完成后,还需要确保 MySQL 服务已正常启动,并且拥有可连接的数据库、用户名和密码。如果还没有数据库,可以先通过 MySQL 客户端创建一个用于测试的数据库,例如:
sql
CREATE DATABASE IF NOT EXISTS python_mysql_demo CHARACTER SET utf8mb4;
二、数据库连接与基本操作
1. 建立数据库连接
使用PyMySQL连接 MySQL 数据库需要提供主机地址、用户名、密码、数据库名等信息。基本连接代码如下:
python
import pymysql
# 连接数据库
db = pymysql.connect(
host="localhost",
user="root",
password="your_password",
database="python_mysql_demo",
charset="utf8mb4"
)
# 创建游标对象
cursor = db.cursor()
# 后续操作...
# 关闭游标和数据库连接
cursor.close()
db.close()
2. 创建数据表
连接成功后,可以通过执行 SQL 语句创建数据表。例如创建一个用户表:
python
# 创建用户表
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
"""
cursor.execute(create_table_sql)
db.commit() # 提交事务
三、数据增删改查实战
1. 插入数据
向数据表中插入数据可以使用INSERT语句,通过游标对象的execute方法执行:
python
# 插入单条数据
insert_sql = """
INSERT INTO users (username, email, age)
VALUES (%s, %s, %s);
"""
data = ("zhangsan", "zhangsan@example.com", 25)
try:
cursor.execute(insert_sql, data)
db.commit()
print("数据插入成功")
except Exception as e:
db.rollback() # 发生错误时回滚
print(f"插入失败:{e}")
# 插入多条数据
insert_many_sql = """
INSERT INTO users (username, email, age)
VALUES (%s, %s, %s);
"""
data_list = [
("lisi", "lisi@example.com", 30),
("wangwu", "wangwu@example.com", 28)
]
try:
cursor.executemany(insert_many_sql, data_list)
db.commit()
print(f"成功插入 {cursor.rowcount} 条数据")
except Exception as e:
db.rollback()
print(f"插入失败:{e}")
2. 查询数据
查询数据使用SELECT语句,通过游标对象获取查询结果:
python
# 查询所有用户
select_sql = "SELECT * FROM users;"
cursor.execute(select_sql)
# 获取所有记录
results = cursor.fetchall()
for row in results:
print(f"ID: {row[0]}, 用户名: {row[1]}, 邮箱: {row[2]}, 年龄: {row[3]}")
# 条件查询
select_where_sql = "SELECT username, email FROM users WHERE age > %s;"
cursor.execute(select_where_sql, (26,))
# 获取一条记录
row = cursor.fetchone()
if row:
print(f"用户名: {row[0]}, 邮箱: {row[1]}")
3. 更新数据
更新数据使用UPDATE语句,同样需要注意事务的提交与回滚:
python
update_sql = "UPDATE users SET age = %s WHERE username = %s;"
data = (26, "zhangsan")
try:
cursor.execute(update_sql, data)
db.commit()
print(f"成功更新 {cursor.rowcount} 条数据")
except Exception as e:
db.rollback()
print(f"更新失败:{e}")
4. 删除数据
删除数据使用DELETE语句,操作时要格外谨慎,避免误删数据:
python
delete_sql = "DELETE FROM users WHERE username = %s;"
data = ("wangwu",)
try:
cursor.execute(delete_sql, data)
db.commit()
print(f"成功删除 {cursor.rowcount} 条数据")
except Exception as e:
db.rollback()
print(f"删除失败:{e}")
四、封装数据库操作类
为了提高代码的复用性和可维护性,可以封装一个数据库操作类:
python
import pymysql
from pymysql.cursors import DictCursor
class MySQLDB:
def __init__(self, host, user, password, database, charset="utf8mb4"):
self.host = host
self.user = user
self.password = password
self.database = database
self.charset = charset
self.db = None
self.cursor = None
def connect(self):
"""建立数据库连接"""
self.db = pymysql.connect(
host=self.host,
user=self.user,
password=self.password,
database=self.database,
charset=self.charset
)
self.cursor = self.db.cursor(DictCursor) # 使用字典游标,返回字典形式的结果
def close(self):
"""关闭连接"""
if self.cursor:
self.cursor.close()
if self.db:
self.db.close()
def execute(self, sql, params=None):
"""执行SQL语句"""
try:
self.connect()
result = self.cursor.execute(sql, params)
self.db.commit()
return result
except Exception as e:
self.db.rollback()
print(f"SQL执行失败:{e}")
raise
finally:
self.close()
def fetchall(self, sql, params=None):
"""获取所有查询结果"""
try:
self.connect()
self.cursor.execute(sql, params)
return self.cursor.fetchall()
except Exception as e:
print(f"查询失败:{e}")
raise
finally:
self.close()
# 使用示例
if __name__ == "__main__":
db = MySQLDB(
host="localhost",
user="root",
password="your_password",
database="python_mysql_demo"
)
# 查询用户
users = db.fetchall("SELECT * FROM users;")
for user in users:
print(user["username"], user["email"])
五、注意事项与优化建议
- 安全问题:避免直接拼接 SQL 语句,使用参数化查询防止 SQL 注入攻击。
- 连接管理:及时关闭数据库连接,避免资源泄露。可以使用上下文管理器(
with语句)来自动管理连接。 - 性能优化:对于大量数据插入,使用
executemany方法效率更高;查询时尽量只获取需要的字段,避免SELECT *。 - 错误处理:完善的异常处理机制能让程序更健壮,便于排查问题。
- 字符集设置:始终将字符集设置为
utf8mb4,以支持中文和 Emoji 等特殊字符。
通过本文的介绍,你已经掌握了 Python 操作 MySQL 数据库的基本方法和实战技巧。在实际开发中,根据具体需求合理运用这些知识,能高效地完成数据处理工作。无论是数据采集、数据分析还是 Web 开发,Python 与 MySQL 的结合都能发挥强大的作用。
3537

被折叠的 条评论
为什么被折叠?



