Python 操作 MySQL 数据库

环境准备

bash 复制代码
pip3 install pymysql

前提条件

  1. 本地 / 远程已安装 MySQL 服务
  2. 拥有 MySQL 数据库的连接信息(主机、端口、用户名、密码、数据库名)
  3. 确保 MySQL 服务正常运行,且网络可访问

操作流程

Python 操作 MySQL 固定 5 步:

  1. 建立数据库连接
  2. 创建游标对象(执行 SQL 的工具)
  3. 执行 SQL 语句
  4. 提交事务(写操作必须)/ 获取查询结果
  5. 关闭游标 + 关闭连接

重要规范

  1. 所有写操作(INSERT/UPDATE/DELETE)必须用 commit() 提交,否则数据不会生效
  2. 必须使用 % s 占位符,不要用字符串拼接,防止 SQL 注入
  3. 操作完成后必须关闭游标和连接,释放资源
  4. try-except-finally 保证异常时数据安全

常见问题

  1. 连接失败:检查主机、端口、用户名、密码、数据库名是否正确
  2. 数据不生效 :忘记写 conn.commit()
  3. 中文乱码 :字符集设置为 utf8mb4
  4. SQL 报错:检查 SQL 语法,优先使用占位符传参

必须掌握的关键字

  • connect():建立数据库连接
  • cursor():创建游标(执行 SQL 的核心对象)
  • execute():执行单条 SQL
  • executemany():执行批量 SQL
  • commit():提交事务(增 / 删 / 改必须调用
  • rollback():事务回滚(出错时撤销操作)
  • fetchone()/fetchall()/fetchmany():获取查询结果
  • close():关闭游标 / 连接

核心流程:连接 → 游标 → 执行 SQL → 提交 / 回滚 → 关闭

增删改查核心函数:execute()/executemany()/fetchone()/fetchall()

必写规范

  • 增删改必须执行 conn.commit(),查询不需要
  • 出错必须执行 conn.rollback() 回滚事务
  • 最后必须关闭游标和连接,避免资源泄漏

连接数据库 创建表

python 复制代码
# 1. 获取数据库连接
conn = pymysql.connect(**DB_CONFIG)

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

# 3. 执行SQL:创建用户表(不存在则创建)
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    age INT,
    gender VARCHAR(10)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
"""
cursor.execute(create_table_sql)
print("数据表创建成功")

# 4. 关闭资源
cursor.close()
conn.close()

新增数据(INSERT)

单条插入

python 复制代码
conn = pymysql.connect(**DB_CONFIG)
cursor = conn.cursor()

# 推荐写法:%s 占位符(防SQL注入)
insert_sql = "INSERT INTO users(name, age, gender) VALUES(%s, %s, %s)"
data = ("张三", 20, "男")

try:
    cursor.execute(insert_sql, data)
    conn.commit()  # 增删改必须提交事务
    print("单条数据插入成功")
except Exception as e:
    conn.rollback()  # 出错回滚
    print("插入失败:", e)
finally:
    cursor.close()
    conn.close()

批量插入(效率更高)

python 复制代码
conn = pymysql.connect(**DB_CONFIG)
cursor = conn.cursor()

insert_sql = "INSERT INTO users(name, age, gender) VALUES(%s, %s, %s)"
# 多条数据用列表包裹
datas = [
    ("李四", 22, "女"),
    ("王五", 25, "男"),
    ("赵六", 19, "女")
]

try:
    cursor.executemany(insert_sql, datas)  # 批量执行
    conn.commit()
    print(f"批量插入 {cursor.rowcount} 条数据成功")
except Exception as e:
    conn.rollback()
    print("批量插入失败:", e)
finally:
    cursor.close()
    conn.close()

查询所有数据

python 复制代码
conn = pymysql.connect(**DB_CONFIG)
cursor = conn.cursor()

# 执行查询
cursor.execute("SELECT * FROM users")

# 1. 获取所有结果
all_data = cursor.fetchall()
print("所有数据:", all_data)

# 2. 获取单条结果
# one_data = cursor.fetchone()

# 3. 获取指定条数结果
# many_data = cursor.fetchmany(3)

# 遍历打印
for item in all_data:
    print(f"ID:{item[0]},姓名:{item[1]},年龄:{item[2]},性别:{item[3]}")

cursor.close()
conn.close()

条件查询

python 复制代码
conn = pymysql.connect(**DB_CONFIG)
cursor = conn.cursor()

# 条件查询:查询年龄>20的用户
sql = "SELECT * FROM users WHERE age > %s"
cursor.execute(sql, (20,))
result = cursor.fetchall()
print("年龄大于20的用户:", result)

cursor.close()
conn.close()
相关推荐
一只小bit1 小时前
Redis哨兵机制、主从复制与集群搭建与维护
数据库·redis·bootstrap
zlwool7 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
软件聚导航10 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
学习星球11 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
GoppViper12 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
2601_9621741712 小时前
Redis 简介
数据库·redis·wpf
夜雪一千12 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
Highcharts.js13 小时前
Highcharts 下钻(Drilldown)柱状图 Demo
数据库·信息可视化·hbase·highcharts·drilldown·js模块·下钻图表
翼龙云_cloud13 小时前
阿里云国际渠道代理商:如何在ECS上部署Flask应用?
运维·数据库·阿里云·flask·云计算