自学内容网 自学内容网

使用 Python 操作 MySQL 数据库

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。

🔍 博客内容包括:

  • Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。
  • 大数据技术:涵盖Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper等相关技术。
  • 开发工具:分享常用开发工具(IDEA、Git、Mac、Alfred、Typora等)的使用技巧,提升开发效率。
  • 数据库与优化:总结MySQL及其他常用数据库技术,解决实际工作中的数据库问题。
  • Python与大数据:专注于Python编程语言的深度学习,数据分析工具(如Pandas、NumPy)和大数据处理技术,帮助您掌握数据分析、数据挖掘、机器学习等技术。
  • 数据结构与算法:总结数据结构与算法的核心知识,提升编程思维,帮助您应对大厂面试挑战。

🌟 我的目标:持续学习与总结,分享技术心得与解决方案,和您一起探索技术的无限可能!在这里,我希望能与您共同进步,互相激励,成为更好的自己。

📣 欢迎订阅本专栏,与我一起在这个知识的海洋中不断学习、分享和成长!💻🚀


📍版权声明:本博客所有内容均为原创,遵循CC 4.0 BY-SA协议,转载请注明出处。

目录

1. 引言

Python 与 MySQL 的关系

2. MySQL 数据库基础

MySQL 数据库简介

创建数据库和表

常见的数据类型

3. Python 环境配置

安装 MySQL 驱动库

配置连接

测试数据库连接

4. 数据库的基本操作

插入数据

查询数据

更新数据

删除数据

5. 事务处理

提交与回滚

6. 高级操作

批量插入数据

使用游标进行数据分页

数据库连接池

7. 错误与异常处理

常见的 MySQL 错误

Python 异常捕获和处理

8. 优化与性能

索引的使用

查询优化

9. Python ORM 库简介


 

1. 引言

Python 是一种非常流行的编程语言,其简单易用且功能强大。在数据处理和后台开发中,MySQL 是最常用的关系型数据库管理系统之一。Python 与 MySQL 配合使用,不仅能高效地管理和操作数据库,还能方便地进行数据分析和处理。

Python 与 MySQL 的关系

Python 提供了多种连接数据库的方式,其中通过第三方库连接 MySQL 数据库是最常见的方式。MySQL ConnectorPyMySQL 是两个常用的库,前者由 MySQL 官方提供,后者是纯 Python 编写的客户端。


2. MySQL 数据库基础

MySQL 数据库简介

MySQL 是一种关系型数据库管理系统 (RDBMS),基于 SQL(结构化查询语言)进行操作。它使用表格来存储数据,并支持事务、外键、索引等功能。

创建数据库和表

-- 创建数据库
CREATE DATABASE IF NOT EXISTS school;

-- 选择数据库
USE school;

-- 创建学生表
CREATE TABLE IF NOT EXISTS students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT,
    gender VARCHAR(10),
    score FLOAT
);

常见的数据类型

  • INT:整数类型
  • VARCHAR(n):变长字符串
  • FLOAT:浮动点数
  • DATE:日期类型

3. Python 环境配置

安装 MySQL 驱动库

使用 Python 操作 MySQL 时,首先需要安装 MySQL 驱动。可以选择 mysql-connector-pythonPyMySQL

安装命令:

pip install mysql-connector-python
# 或者
pip install PyMySQL

配置连接

使用 Python 连接 MySQL 数据库时,首先需要配置连接信息(如主机、用户名、密码等)。

 

import mysql.connector

# 建立数据库连接
conn = mysql.connector.connect(
    host='localhost',       # 数据库主机
    user='root',            # 数据库用户名
    password='password',    # 数据库密码
    database='school'       # 要操作的数据库
)

# 创建一个游标对象
cursor = conn.cursor()

测试数据库连接

# 测试连接是否成功
cursor.execute("SELECT DATABASE()")
result = cursor.fetchone()
print("连接到数据库:", result[0])

# 关闭游标和连接
cursor.close()
conn.close()

4. 数据库的基本操作

插入数据

# 插入数据
cursor = conn.cursor()

insert_query = """
INSERT INTO students (name, age, gender, score)
VALUES (%s, %s, %s, %s)
"""
data = ("John Doe", 20, "Male", 85.5)

cursor.execute(insert_query, data)
conn.commit()  # 提交事务

print(f"插入了 {cursor.rowcount} 条数据")
cursor.close()

查询数据

# 查询数据
cursor = conn.cursor()

select_query = "SELECT * FROM students"
cursor.execute(select_query)

# 获取查询结果
results = cursor.fetchall()

for row in results:
    print(row)

cursor.close()

更新数据

# 更新数据
cursor = conn.cursor()

update_query = "UPDATE students SET score = %s WHERE name = %s"
data = (90.0, "John Doe")

cursor.execute(update_query, data)
conn.commit()

print(f"更新了 {cursor.rowcount} 条数据")
cursor.close()

删除数据

# 删除数据
cursor = conn.cursor()

delete_query = "DELETE FROM students WHERE name = %s"
data = ("John Doe",)

cursor.execute(delete_query, data)
conn.commit()

print(f"删除了 {cursor.rowcount} 条数据")
cursor.close()

5. 事务处理

事务用于保证数据库操作的一致性。Python 中的 MySQL 操作默认是自动提交的,若需要使用事务,需手动控制提交和回滚。

提交与回滚

cursor = conn.cursor()

try:
    # 插入操作
    cursor.execute("INSERT INTO students (name, age, gender, score) VALUES ('Jane Doe', 22, 'Female', 88.5)")
    # 模拟错误
    cursor.execute("INSERT INTO students (name, age, gender) VALUES ('Error', 25, 'Male')")  # 缺少一个字段

    conn.commit()  # 提交事务
except mysql.connector.Error as err:
    print(f"发生错误: {err}")
    conn.rollback()  # 回滚事务

cursor.close()

6. 高级操作

批量插入数据

# 批量插入
cursor = conn.cursor()

insert_query = """
INSERT INTO students (name, age, gender, score)
VALUES (%s, %s, %s, %s)
"""

data = [
    ("Alice", 21, "Female", 92.0),
    ("Bob", 24, "Male", 78.5),
    ("Charlie", 23, "Male", 85.0)
]

cursor.executemany(insert_query, data)
conn.commit()

print(f"插入了 {cursor.rowcount} 条数据")
cursor.close()

使用游标进行数据分页

# 使用游标分页查询
cursor = conn.cursor()

limit = 5
offset = 0

select_query = f"SELECT * FROM students LIMIT {limit} OFFSET {offset}"

cursor.execute(select_query)

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

cursor.close()

数据库连接池

使用连接池可以有效管理数据库连接,避免每次操作都建立新的连接。

from mysql.connector import pooling

# 配置连接池
dbconfig = {
    "user": "root",
    "password": "password",
    "host": "localhost",
    "database": "school"
}

pool = pooling.MySQLConnectionPool(pool_name="mypool", pool_size=5, **dbconfig)

# 获取连接
conn = pool.get_connection()
cursor = conn.cursor()

# 执行查询
cursor.execute("SELECT * FROM students")
for row in cursor.fetchall():
    print(row)

cursor.close()
conn.close()

7. 错误与异常处理

在实际开发中,我们需要处理数据库连接时可能出现的各种异常。

常见的 MySQL 错误

  • 1045:用户名或密码错误
  • 2003:无法连接到 MySQL 服务器
  • 1064:SQL 语法错误

Python 异常捕获和处理

try:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM non_existent_table")  # 错误的 SQL 查询
except mysql.connector.Error as err:
    print(f"MySQL 错误: {err}")
finally:
    cursor.close()

8. 优化与性能

索引的使用

索引可以加速查询操作,尤其是在处理大量数据时。

CREATE INDEX idx_name ON students(name);

查询优化

优化查询时,可以考虑以下几方面:

  • 使用 EXPLAIN 关键字查看查询计划
  • 避免在 WHERE 子句中使用函数
  • 尽量避免 SELECT *

9. Python ORM 库简介

Python 还提供了 ORM(对象关系映射)库,用于简化数据库操作,常见的有 SQLAlchemyDjango ORM。仅作了解


原文地址:https://blog.csdn.net/weixin_45710998/article/details/145156494

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!