轻松实现 Python 操作 MySQL 数据库

在数据驱动的开发中,Python 与 MySQL 的结合是处理数据的常用方式。Python 凭借简洁的语法和丰富的库,能轻松实现与 MySQL 数据库的交互,完成数据的增删改查等操作。本文将详细介绍如何使用 Python 操作 MySQL 数据库,从环境搭建到实战案例,帮助你快速掌握这一技能。

一、环境准备与库安装

要实现 Python 操作 MySQL,首先需要安装相应的库。目前最常用的是mysql-connector-pythonPyMySQL,两者功能类似,这里以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"])

五、注意事项与优化建议

  1. 安全问题:避免直接拼接 SQL 语句,使用参数化查询防止 SQL 注入攻击。
  2. 连接管理:及时关闭数据库连接,避免资源泄露。可以使用上下文管理器(with语句)来自动管理连接。
  3. 性能优化:对于大量数据插入,使用executemany方法效率更高;查询时尽量只获取需要的字段,避免SELECT *
  4. 错误处理:完善的异常处理机制能让程序更健壮,便于排查问题。
  5. 字符集设置:始终将字符集设置为utf8mb4,以支持中文和 Emoji 等特殊字符。

通过本文的介绍,你已经掌握了 Python 操作 MySQL 数据库的基本方法和实战技巧。在实际开发中,根据具体需求合理运用这些知识,能高效地完成数据处理工作。无论是数据采集、数据分析还是 Web 开发,Python 与 MySQL 的结合都能发挥强大的作用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值