程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Python访问MySQL全流程实战指南(python访问mysql全流程实战指南最新版)

balukai 2025-06-09 20:09:33 文章精选 7 ℃

一、环境准备

  1. 安装MySQL服务
    需提前安装MySQL数据库并创建测试数据库(如test_db),建议通过命令行或图形化工具(如phpMyAdmin)完成。
  2. 安装Python驱动

pymysql库为纯Python实现,兼容性最佳。

使用pip安装pymysql库:

Bash
pip install pymysql

二、建立数据库连接

  1. 连接参数说明

参数名

说明

示例值

host

数据库服务器地址(本地用localhost)

127.0.0.1

port

端口号(默认3306)

3306

user

用户名

root

password

密码

123456

database

要连接的数据库名

test_db

  1. 代码示例
Bash
import pymysql

conn = pymysql.connect(
    host="localhost",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8mb4"  # 支持Emoji和特殊字符
)
cursor = conn.cursor()

关键点:charset="utf8mb4"避免中文乱码,建议使用with语句自动管理连接。

三、基础CRUD操作

  1. 创建数据表

使用IF NOT EXISTS避免重复创建表。

create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    email VARCHAR(100) UNIQUE
)
"""
cursor.execute(create_table_sql)
conn.commit()
  1. 插入数据
insert_sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
data = ("张三", 25, "zhangsan@example.com")
cursor.execute(insert_sql, data)
conn.commit()

注意:修改数据需调用commit(),失败时用rollback()回滚。

  1. 查询数据

结果以元组形式返回,可通过索引或字段名访问。

select_sql = "SELECT * FROM users WHERE age > %s"
cursor.execute(select_sql, (20,))
results = cursor.fetchall()
for row in results:
    print(f"ID: {row[0]}, 姓名: {row[1]}, 年龄: {row[2]}")
  1. 更新与删除

参数化防止SQL注入。

# 更新数据
update_sql = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(update_sql, (30, "张三"))
conn.commit()

# 删除数据
delete_sql = "DELETE FROM users WHERE age < %s"
cursor.execute(delete_sql, (20,))
conn.commit()

四、事务与异常处理

  1. 事务特性(ACID)
  2. 原子性:操作要么全部成功,要么全部失败
  3. 一致性:数据始终有效
  4. 隔离性:并发操作互不干扰
  5. 持久性:提交后数据永久保存。
  6. 事务代码示例

适用于转账等对数据操作有极高要求的关键操作。

try:
    conn.begin()
    cursor.execute("UPDATE account SET balance = balance - 100 WHERE user = 'A'")
    cursor.execute("UPDATE account SET balance = balance + 100 WHERE user = 'B'")
    conn.commit()
except Exception as e:
    conn.rollback()
    print(f"事务失败:{e}")

五、高级技巧

  1. 使用ORM简化操作
    推荐SQLAlchemy库,支持将查询结果转为DataFrame,以提升开发效率:
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://user:pass@host/db")
df = pd.read_sql("SELECT * FROM users", engine)
  1. 性能优化
  2. 批量插入
data = [("李四", 30, "lisi@example.com")] * 1000
cursor.executemany(insert_sql, data)
conn.commit()
  1. 分页查询:LIMIT 10 OFFSET 20
  2. 连接池:使用DBUtils库管理连接。

六、完整示例代码

import pymysql

class MySQLHelper:
    def __init__(self, config):
        self.config = config
    
    def __enter__(self):
        self.conn = pymysql.connect(**self.config)
        return self.conn.cursor()
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.conn.close()

# 使用示例
config = {
    "host": "localhost",
    "user": "root",
    "password": "123456",
    "database": "test_db",
    "charset": "utf8mb4"
}

with MySQLHelper(config) as cursor:
    cursor.execute("CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY, name VARCHAR(50))")
    cursor.execute("INSERT INTO users (name) VALUES (%s)", ("王五",))

优势:自动管理连接生命周期,代码简洁易读。

总结

通过以上步骤可系统掌握Python与MySQL的基础交互。实际开发中建议结合索引优化、慢查询分析等进阶技术提升性能。

最近发表
标签列表