使用 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 是最常用的关系型数据库管理系统之一。Python 与 MySQL 配合使用,不仅能高效地管理和操作数据库,还能方便地进行数据分析和处理。
Python 与 MySQL 的关系
Python 提供了多种连接数据库的方式,其中通过第三方库连接 MySQL 数据库是最常见的方式。MySQL Connector
和 PyMySQL
是两个常用的库,前者由 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-python
或 PyMySQL
。
安装命令:
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(对象关系映射)库,用于简化数据库操作,常见的有 SQLAlchemy
和 Django ORM
。仅作了解
原文地址:https://blog.csdn.net/weixin_45710998/article/details/145156494
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!