网站首页 > 文章精选 正文
一、环境准备
- 安装MySQL服务
需提前安装MySQL数据库并创建测试数据库(如test_db),建议通过命令行或图形化工具(如phpMyAdmin)完成。 - 安装Python驱动
pymysql库为纯Python实现,兼容性最佳。
使用pip安装pymysql库:
Bash
pip install pymysql
二、建立数据库连接
- 连接参数说明
参数名 | 说明 | 示例值 |
host | 数据库服务器地址(本地用localhost) | 127.0.0.1 |
port | 端口号(默认3306) | 3306 |
user | 用户名 | root |
password | 密码 | 123456 |
database | 要连接的数据库名 | test_db |
- 代码示例
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操作
- 创建数据表
使用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()
- 插入数据
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()回滚。
- 查询数据
结果以元组形式返回,可通过索引或字段名访问。
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]}")
- 更新与删除
参数化防止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()
四、事务与异常处理
- 事务特性(ACID)
- 原子性:操作要么全部成功,要么全部失败
- 一致性:数据始终有效
- 隔离性:并发操作互不干扰
- 持久性:提交后数据永久保存。
- 事务代码示例
适用于转账等对数据操作有极高要求的关键操作。
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}")
五、高级技巧
- 使用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)
- 性能优化
- 批量插入:
data = [("李四", 30, "lisi@example.com")] * 1000
cursor.executemany(insert_sql, data)
conn.commit()
- 分页查询:LIMIT 10 OFFSET 20
- 连接池:使用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的基础交互。实际开发中建议结合索引优化、慢查询分析等进阶技术提升性能。
猜你喜欢
- 2025-06-09 技术老兵十年专攻MySQL:编写了763页核心总结,90%MySQL问题全解
- 2025-06-09 从B+树原理到实战:MySQL索引设计的22条军规
- 2025-06-09 mysqldump备份操作大全及相关参数详解
- 2025-06-09 在Windows 10下安装配置MySQL数据库
- 2025-06-09 MySQL 批量写入性能暴增 10 倍!资深工程师的 7 个狠招(附实战代码)
- 2025-06-09 从零到亿级数据:MySQL 分库分表实战避坑指南
- 2025-06-09 重磅发布!这份MySQL全面总结手册,受喜爱程度不输任何大厂笔记
- 2025-06-09 MySql客户端(MySQL客户端安装教程)
- 2025-06-09 掌握Pymysql轻松实现Python数据库编程
- 2025-06-09 Linux:从命令行备份 MySQL 数据库
- 06-24PLC常用进制数及转换方法(plc中进制符号)
- 06-24PLC常用数制及转换方法,让你轻松掌握PLC编程
- 06-24PLC编程必看!5种常见进制数解析,搞懂才能玩转PLC!
- 06-24C数据类型——常量(c的数据类型及其定义方法)
- 06-24什么是二进制、八进制、十进制、十六进制?
- 06-24理论基础——十进制、二进制、十六进制、八进制
- 06-24搞不懂PLC中的高字节、低字位是啥?看完这篇文章就懂了!
- 06-242、进位制之间的转换(含有小数位)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)