Python爬虫进阶教程(八):MySQL 数据库连接

Python爬虫进阶教程(八):MySQL 数据库连接
最新回答
凉秋瑾言

2026-04-29 12:18:25

PyMySQL是Python中用于连接MySQL数据库的纯Python客户端库,旨在替代MySQLdb并兼容多种Python实现(如CPython、PyPy和IronPython)。以下是使用PyMySQL进行数据库连接和操作的关键步骤及示例代码:

1. 环境要求
  • Python版本:CPython ≥2.6或≥3.3,PyPy ≥4.0,IronPython 2.7。
  • MySQL版本:MySQL ≥4.1(测试版≥5.5)或MariaDB ≥5.1。
2. 安装PyMySQL

通过pip直接安装:

pip install PyMySQL

或在PyCharm等IDE中通过图形界面安装。

3. 数据库连接与基础操作连接数据库import pymysql# 连接数据库(参数:主机、用户名、密码、数据库名)db = pymysql.connect('localhost', 'testdb', '123456', 'testdb')cursor = db.cursor() # 创建游标对象# 查询数据库版本cursor.execute("SELECT VERSION()")version = cursor.fetchone()print(f"Database Version: {version[0]}")db.close() # 关闭连接创建表

需提前在MySQL中创建数据库和表(如通过命令行):

CREATE DATABASE testdb;USE testdb;CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL);4. 增删改查操作插入数据
  • 方法1:直接拼接SQL

    sql = "INSERT INTO users(email, password) VALUES ('123@qq.com', '123')"cursor.execute(sql)db.commit() # 提交事务
  • 方法2:参数化查询(推荐,防SQL注入)

    sql = "INSERT INTO users(email, password) VALUES (%s, %s)"cursor.execute(sql, ('456@qq.com', '456'))db.commit()
查询数据cursor.execute("SELECT * FROM users")results = cursor.fetchall() # 获取所有结果for row in results: print(f"ID: {row[0]}, Email: {row[1]}, Password: {row[2]}")更新数据sql = "UPDATE users SET email = '1234@qq.com' WHERE id = 1"cursor.execute(sql)db.commit()删除数据sql = "DELETE FROM users WHERE id = 1"cursor.execute(sql)db.commit()5. 事务与错误处理

使用try-except块确保操作失败时回滚:

try: cursor.execute("INSERT INTO users VALUES (NULL, '789@qq.com', '789')") db.commit()except Exception as e: db.rollback() # 回滚事务 print(f"Error: {e}")finally: db.close() # 确保连接关闭6. 总结

PyMySQL操作MySQL的核心流程:

  1. 连接数据库:使用pymysql.connect()指定主机、用户、密码和数据库。
  2. 创建游标:通过cursor()方法执行SQL。
  3. 执行操作:增删改查需调用execute(),查询后用fetchall()或fetchone()获取结果。
  4. 提交/回滚:修改数据后需commit(),出错时rollback()。
  5. 关闭连接:释放资源。
注意事项
  • 参数化查询:始终使用%s占位符避免SQL注入。
  • 远程连接:若连接远程服务器(如阿里云),需在MySQL中配置用户权限:GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password';FLUSH PRIVILEGES;
  • 字符编码:建议表使用utf8mb4以支持完整Unicode。

通过以上步骤,可高效安全地实现Python与MySQL的交互。