1. Python与MySQL交互的基础准备
在开始使用Python操作MySQL之前,我们需要完成一些基础准备工作。MySQL作为最流行的开源关系型数据库之一,与Python的结合能够为开发者提供强大的数据处理能力。
1.1 MySQL驱动选择与安装
Python连接MySQL需要依赖特定的数据库驱动。目前主流的选择有:
- mysql-connector-python:MySQL官方提供的纯Python驱动
- PyMySQL:纯Python实现的MySQL客户端
- MySQLdb:C语言实现的传统驱动(仅支持Python 2)
对于大多数现代Python项目,我推荐使用mysql-connector-python。它不仅由MySQL官方维护,而且完全用Python实现,兼容性好且安装简单。安装命令如下:
bash复制pip install mysql-connector-python
注意:如果同时安装了多个MySQL驱动,可能会产生冲突。建议在虚拟环境中进行安装,保持项目依赖的独立性。
1.2 数据库连接配置
建立数据库连接是操作MySQL的第一步。以下是一个标准的连接配置示例:
python复制import mysql.connector
config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'your_database',
'port': 3306,
'charset': 'utf8mb4',
'connection_timeout': 10
}
try:
conn = mysql.connector.connect(**config)
print("数据库连接成功!")
except mysql.connector.Error as err:
print(f"连接失败: {err}")
finally:
if 'conn' in locals() and conn.is_connected():
conn.close()
在实际项目中,我建议将数据库配置信息存储在环境变量或配置文件中,而不是直接硬编码在代码里。这样可以提高安全性,也便于不同环境的切换。
1.3 连接池管理
对于需要频繁操作数据库的应用,使用连接池可以显著提高性能。mysql-connector-python提供了连接池的实现:
python复制from mysql.connector import pooling
dbconfig = {
"host": "localhost",
"user": "your_username",
"password": "your_password",
"database": "your_database"
}
connection_pool = pooling.MySQLConnectionPool(
pool_name="mypool",
pool_size=5,
pool_reset_session=True,
**dbconfig
)
# 从连接池获取连接
conn = connection_pool.get_connection()
连接池的大小(pool_size)需要根据应用的实际负载进行调整。过小会导致等待,过大则会浪费资源。根据我的经验,对于一般的Web应用,5-10个连接通常足够。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础CRUD操作实战
掌握了数据库连接后,我们来看如何使用Python执行基本的增删改查(CRUD)操作。
2.1 创建数据表
在执行任何操作前,我们需要先创建数据表。以下是一个用户表的创建示例:
python复制def create_users_table(conn):
cursor = conn.cursor()
create_table_query = """
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
"""
try:
cursor.execute(create_table_query)
conn.commit()
print("用户表创建成功")
except mysql.connector.Error as err:
print(f"创建表失败: {err}")
finally:
cursor.close(
