杰瑞科技汇

Python安装PyMySQL报错怎么办?

安装 PyMySQL

最常用的安装方式是使用 pip(Python 的包安装器)。

Python安装PyMySQL报错怎么办?-图1
(图片来源网络,侵删)

步骤 1:打开终端或命令提示符

  • Windows: 在开始菜单中搜索 cmdPowerShell,然后打开。
  • macOS: 打开“终端”(Terminal)应用程序。
  • Linux: 打开“终端”(Terminal)或“控制台”(Console)。

步骤 2:执行安装命令

在终端中,输入以下命令并按回车键:

pip install PyMySQL

可能会遇到的提示:

步骤 3:验证安装

安装完成后,您可以运行以下 Python 代码来验证 PyMySQL 是否已成功安装:

import pymysql
# 如果没有报错,说明安装成功
print("PyMySQL 安装成功!")
print(pymysql.__version__)

将以上代码保存为 .py 文件并运行,或者直接在 Python 交互式环境中输入,如果能打印出版本号,就代表安装成功了。


使用 PyMySQL 连接 MySQL 数据库

安装完成后,就可以在您的 Python 代码中使用它来连接和操作 MySQL 数据库了。

基本连接和查询示例

以下是一个完整的示例,演示如何连接到 MySQL 数据库,执行一个简单的 SELECT 查询,并处理结果。

import pymysql
# 1. 创建数据库连接
# 请将以下占位符替换为您自己的数据库信息
conn = pymysql.connect(
    host='localhost',      # 数据库主机地址
    user='root',          # 数据库用户名
    password='your_password', # 数据库密码
    database='your_database', # 要连接的数据库名
    charset='utf8mb4',    # 字符编码,推荐使用 utf8mb4
    cursorclass=pymysql.cursors.DictCursor  # 以字典形式返回结果,方便使用
)
try:
    # 2. 创建一个游标对象
    # 游标用于执行 SQL 语句
    with conn.cursor() as cursor:
        # 3. 编写 SQL 查询语句
        sql = "SELECT id, name, email FROM users WHERE id = %s"
        # 4. 执行 SQL 查询 (注意:使用 %s 作为占位符)
        # execute 方法的第二个参数是一个元组
        cursor.execute(sql, (1,)) # 查询 id 为 1 的用户
        # 5. 获取查询结果
        # fetchone() 获取单条结果
        result = cursor.fetchone()
        # 打印结果
        if result:
            print("查询结果:", result)
            # 可以像字典一样访问数据
            print(f"用户名: {result['name']}, 邮箱: {result['email']}")
        else:
            print("未找到匹配的记录")
finally:
    # 6. 关闭数据库连接
    # 无论操作是否成功,最后都要关闭连接,释放资源
    conn.close()
    print("数据库连接已关闭。")

代码解释:

  1. pymysql.connect(...): 用于建立与 MySQL 服务器的连接,您需要提供主机、用户、密码、数据库名等信息。
  2. with conn.cursor() as cursor:: 使用 with 语句可以确保游标在使用完毕后被自动关闭,这是一种良好的实践。
  3. sql = "SELECT ... WHERE id = %s": 非常重要!PyMySQL 中,您应该始终使用 %s 作为 SQL 语句的占位符,而不是将变量直接拼接到 SQL 字符串中,这可以防止 SQL 注入攻击。
  4. cursor.execute(sql, (1,)): 执行 SQL 语句,第二个参数是一个包含所有占位符值的元组,即使只有一个值,也需要写成元组形式 (1,)
  5. cursor.fetchone(): 获取查询结果的第一行,如果有多行,可以使用 fetchall() 获取所有行。
  6. conn.close(): 关闭数据库连接,这是必不可少的步骤,否则会导致数据库连接资源泄漏。

执行插入、更新和删除操作

对于 INSERT, UPDATE, DELETE 等会修改数据库的操作,执行完成后必须调用 conn.commit() 来提交事务,否则更改不会真正保存到数据库中。

import pymysql
# 连接信息
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='your_password',
    database='your_database',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)
try:
    with conn.cursor() as cursor:
        # --- 插入数据示例 ---
        sql_insert = "INSERT INTO users (name, email) VALUES (%s, %s)"
        user_to_insert = ('张三', 'zhangsan@example.com')
        cursor.execute(sql_insert, user_to_insert)
        # --- 更新数据示例 ---
        sql_update = "UPDATE users SET email = %s WHERE name = %s"
        cursor.execute(sql_update, ('zhangsan_new@example.com', '张三'))
        # --- 删除数据示例 ---
        sql_delete = "DELETE FROM users WHERE name = %s"
        cursor.execute(sql_delete, ('李四',)) # 假设要删除一个叫李四的用户
        # 提交事务!这是关键步骤
        conn.commit()
        print("数据操作成功,已提交事务。")
except Exception as e:
    # 如果发生错误,回滚事务
    conn.rollback()
    print(f"操作失败,已回滚事务: {e}")
finally:
    conn.close()
    print("数据库连接已关闭。")

关键点:

  • conn.commit(): 在执行了所有修改操作后调用,将更改永久保存到数据库。
  • conn.rollback(): 如果在操作过程中发生错误,调用它可以撤销当前事务中的所有未提交的更改,保证数据的一致性。
  • try...except...finally: 结构是处理数据库操作的推荐模式,可以确保无论成功还是失败,连接都能被正确关闭。

常见问题与解决方案

Q1: ModuleNotFoundError: No module named 'pymysql'

原因: PyMySQL 没有安装成功,或者 Python 解释器找不到它。 解决方案:

  1. 确认您使用的 pip 版本是否与您的 Python 版本匹配(用 python -m pip install PyMySQL)。
  2. 确认 PyMySQL 是否安装到了正确的 Python 环境中,如果您在使用虚拟环境(如 venvconda),请确保在激活虚拟环境后再进行安装。

Q2: pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (10061)")

原因: 无法连接到 MySQL 服务器,这通常不是 PyMySQL 本身的问题,而是数据库服务的问题。 解决方案:

  1. 确认 MySQL 服务是否正在运行:在 Windows 上检查服务管理器,在 Linux/macOS 上使用 sudo systemctl status mysql
  2. 确认主机地址 host 是否正确:默认是 localhost,MySQL 服务器不在本机,请填写正确的 IP 地址。
  3. 确认用户名 user 和密码 password 是否正确
  4. 确认端口:MySQL 不是运行在默认的 3306 端口,您需要在 connect 函数中添加 port=端口号 参数。

Q3: pymysql.err.InternalError: (1054, "Unknown column 'xxx' in 'field list'")

原因: 您 SQL 语句中引用的列名在数据库表中不存在。 解决方案:

  1. 检查 SQL 语句中的列名拼写是否正确。
  2. 检查您连接的数据库 database 和表是否正确。

希望这份详细的指南能帮助您顺利安装和使用 PyMySQL

分享:
扫描分享到社交APP
上一篇
下一篇