04 Python进阶:MySQL-PyMySQL

什么是 PyMySQL?

PyMySQL 是一个用于 Python 的纯 Python MySQL 客户端库,提供了与 MySQL 数据库进行交互的功能。PyMySQL 允许 Python 开发人员连接到 MySQL 数据库服务器,并执行诸如查询、插入、更新和删除等数据库操作。

以下是 PyMySQL 的一些主要概念和特点:

  1. 纯 Python 实现: PyMySQL 是用纯 Python 编写的 MySQL 客户端库,不依赖于 MySQL C 驱动,因此可以在不同的平台上轻松安装和使用。

  2. 轻量级且简单易用: PyMySQL 提供了简洁易用的接口,可以方便地在 Python 中执行对 MySQL 数据库的操作,适合中小型项目或者快速原型开发。

  3. 支持标准的 MySQL 功能: PyMySQL 支持常见的数据库操作,包括连接数据库、执行 SQL 查询、事务处理、数据类型映射等功能,使开发人员能够轻松管理数据库。

  4. 兼容性好: PyMySQL 支持 MySQL 5.x 和 MySQL 8.x 版本,可以与各种 MySQL 数据库版本进行交互。

  5. 开源和活跃的社区支持: PyMySQL 是一个开源项目,拥有活跃的社区支持和持续的更新,开发人员可以在 GitHub 上查看源代码、报告问题和提交贡献。

通过使用 PyMySQL,Python 开发人员可以方便地与 MySQL 数据库进行交互,执行各种数据库操作,并将数据库操作无缝集成到他们的 Python 应用程序中。

PyMySQL 安装

要安装 PyMySQL 库,你可以通过 Python 的包管理工具 pip 来进行安装。以下是在终端中使用 pip 安装 PyMySQL 的步骤:

  1. 打开终端(或命令提示符)。

  2. 使用以下命令安装 PyMySQL:

    pip install pymysql
    
  3. 等待安装完成。pip 将会下载 PyMySQL 库并自动进行安装过程。

  4. 验证安装是否成功。你可以在 Python 环境中尝试导入 PyMySQL,如果没有报错,则表示安装成功。

    python 复制代码
    import pymysql

如果安装过程出现任何问题,可以尝试以下方法解决:

  • 确保你使用了正确的 pip 版本。在某些系统中,pip 可能被称为 pip3。

  • 确保你有足够的权限来安装 Python 包。你可能需要以管理员权限或者使用 sudo 来执行安装命令。

  • 在使用 pip 安装之前,建议先更新 pip 工具。可以使用以下命令来更新 pip:

    pip install --upgrade pip
    

安装完成后,你就可以在 Python 代码中引入 PyMySQL 库,并开始与 MySQL 数据库进行交互。

数据库连接

连接到数据库是 PyMySQL 中的一个关键操作。你可以使用 PyMySQL 来连接到 MySQL 数据库,并执行各种数据库操作,比如执行查询、插入数据、更新和删除等。

以下是一个简单的示例代码,演示了如何在 Python 中使用 PyMySQL 连接到 MySQL 数据库:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 示例:执行一条查询语句
sql_query = "SELECT * FROM your_table"
cursor.execute(sql_query)
results = cursor.fetchall()
for row in results:
    print(row)

# 示例:执行一条插入语句
sql_insert = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
data = ('value1', 'value2')
cursor.execute(sql_insert, data)
connection.commit()

# 关闭游标和连接
cursor.close()
connection.close()

在上述示例中,首先使用 pymysql.connect 方法建立到数据库的连接,并指定主机名、用户名、密码、数据库名称以及端口号(如果不是默认端口)。之后创建了一个游标对象,通过游标对象执行 SQL 查询和插入语句,并可以获取结果或者提交更改。最后,记得关闭游标和连接以释放资源。

请注意,上述示例中的连接参数需要被替换为实际的数据库信息。此外,需要根据具体的需求编写和执行相应的 SQL 语句。

创建数据库表

当使用 PyMySQL 连接到 MySQL 数据库后,你可以通过执行 SQL 语句来创建数据库表。下面是一个简单的示例代码,演示了如何使用 PyMySQL 创建数据库表:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 创建表的 SQL 语句
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""

# 执行创建表的 SQL 语句
cursor.execute(create_table_sql)

# 提交更改
connection.commit()

# 关闭游标和连接
cursor.close()
connection.close()

在上述示例中,首先通过 pymysql.connect 方法建立到数据库的连接,并指定主机名、用户名、密码、数据库名称以及端口号(如果不是默认端口)。之后创建了一个游标对象,并使用 SQL 语句来描述要创建的表的结构。在这个例子中,我们创建了一个名为 users 的表,包括了 id、username、email 和 created_at 四个字段。接着用游标对象执行 SQL 语句,并提交更改。最后,记得关闭游标和连接以释放资源。

需要注意的是,在实际的应用场景中,你可能需要根据具体需求设计表结构并编写相应的 SQL 语句。

数据库插入操作

在使用 PyMySQL 连接到 MySQL 数据库后,你可以通过执行 SQL 插入语句向数据库表中插入数据。以下是一个简单的示例代码,演示了如何使用 PyMySQL 进行数据库插入操作:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 插入数据的 SQL 语句
insert_sql = "INSERT INTO users (username, email) VALUES (%s, %s)"

# 要插入的数据
data = ('john_doe', 'john.doe@example.com')

# 执行插入操作
cursor.execute(insert_sql, data)

# 提交更改
connection.commit()

# 关闭游标和连接
cursor.close()
connection.close()

在上述示例中,我们首先通过 pymysql.connect 方法建立到数据库的连接,并指定主机名、用户名、密码、数据库名称以及端口号。之后创建了一个游标对象,并定义了一个插入数据的 SQL 语句 insert_sql。我们将要插入的数据保存在变量 data 中,然后使用游标对象的 execute 方法执行插入操作。最后,提交更改并关闭游标和连接。

请注意,插入数据时需要保证数据的格式和顺序与 SQL 语句中的占位符 %s 一致,这样可以防止 SQL 注入等安全问题。在实际应用中,你可以根据实际情况修改 SQL 语句和数据内容来进行插入操作。

数据库查询操作

无条件查询

在使用 PyMySQL 连接到 MySQL 数据库后,你可以通过执行 SQL 查询语句从数据库中检索数据。以下是一个简单的示例代码,演示了如何使用 PyMySQL 进行数据库查询操作:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 执行查询的 SQL 语句
query_sql = "SELECT * FROM users"

# 执行查询操作
cursor.execute(query_sql)

# 获取查询结果
results = cursor.fetchall()

# 输出查询结果
for row in results:
    print(row)

# 关闭游标和连接
cursor.close()
connection.close()

在上面的示例中,我们首先通过 pymysql.connect 方法建立到数据库的连接,并指定主机名、用户名、密码、数据库名称以及端口号。然后创建了一个游标对象,并定义了一个查询语句 query_sql,用于检索表 users 中的所有数据。接着使用游标对象的 execute 方法执行查询操作,再用 fetchall 方法获取查询结果集并逐行输出。

当需要执行更加复杂的查询时,你可以根据需要编写不同的 SQL 查询语句,包括条件查询、排序、多表连接等。同时,PyMySQL 提供了丰富的方法来处理查询结果,例如 fetchonefetchmany 等。

条件查询

要执行条件查询,你可以在 SQL 查询语句中使用 WHERE 子句来指定一个或多个条件。以下是一个示例代码,演示了如何在 PyMySQL 中执行条件查询:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 执行条件查询的 SQL 语句
query_sql = "SELECT * FROM users WHERE username = %s"

# 指定条件值
username = 'john_doe'

# 执行查询操作
cursor.execute(query_sql, (username,))

# 获取查询结果
results = cursor.fetchall()

# 输出查询结果
for row in results:
    print(row)

# 关闭游标和连接
cursor.close()
connection.close()

在上述示例中,我们定义了一个带有条件查询的 SQL 查询语句 query_sql,其中使用了 WHERE username = %s 条件,这里 %s 是占位符。在执行查询操作时,我们传递了需要匹配的用户名 john_doe 并确保它们按正确的顺序传递给 execute 方法。

当需要进行更复杂的条件查询时,你可以使用其他比较运算符(如 =, >, <, >=, <=, <> 等)和逻辑运算符(如 AND, OR, NOT 等)来构建更灵活的查询条件。根据实际需求,你可以调整查询条件以获取符合条件的数据。

数据库更新操作

要执行数据库更新操作,你可以使用 SQL 的 UPDATE 语句来修改表中的数据。以下是一个简单示例代码,演示了如何使用 PyMySQL 进行数据库更新操作:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 执行更新操作的 SQL 语句
update_sql = "UPDATE users SET email = %s WHERE username = %s"

# 更新的数据
new_email = 'new_email@example.com'
username = 'john_doe'

# 执行更新操作
cursor.execute(update_sql, (new_email, username))

# 提交更改
connection.commit()

# 关闭游标和连接
cursor.close()
connection.close()

在上述示例中,我们首先建立到数据库的连接,然后创建一个游标对象。接着定义了一个用于更新数据的 SQL 语句 update_sql,其中使用 SET 关键字指定需要更新的字段和对应的新值,WHERE 子句指定更新的条件。我们将要更新的数据保存在变量 new_emailusername 中,并通过游标对象的 execute 方法执行更新操作。最后,提交更改并关闭游标和连接。

请确保更新语句中的条件能够准确定位到需要更新的记录,以免影响不必要的数据。如果需要更新多条记录,可以根据实际情况调整更新条件。

记录删除操作

要执行记录删除操作,可以使用 SQL 的 DELETE 语句来删除表中的特定记录。如果需要清空整个表,也可以使用 TRUNCATE TABLE 语句。以下是一个示例代码,演示了如何在 PyMySQL 中执行记录删除操作和表数据清空:

删除特定记录

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 执行删除操作的 SQL 语句
delete_sql = "DELETE FROM users WHERE age < %s"

# 指定条件值
max_age = 18

# 执行删除操作
cursor.execute(delete_sql, (max_age,))

# 提交更改
connection.commit()

# 关闭游标和连接
cursor.close()
connection.close()

清空整个表

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

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

# 执行清空表的 SQL 语句
truncate_sql = "TRUNCATE TABLE users"

# 执行清空表操作
cursor.execute(truncate_sql)

# 提交更改
connection.commit()

# 关闭游标和连接
cursor.close()
connection.close()

在上述示例中,我们展示了两种常见的数据操作:删除符合特定条件的记录和清空整个表的数据。对于记录删除操作,我们使用 DELETE FROM table_name WHERE condition 语句,并通过传递条件值来指定要删除的记录。对于清空整个表的操作,可以使用TRUNCATE TABLE table_name 语句。

请谨慎执行删除和清空操作,确保操作不会导致不可恢复的数据丢失。在删除操作之前,建议先备份数据以防意外发生。

执行事务

在数据库中,事务是一组被视为单个工作单元的操作,要么全部执行,要么全部回滚(撤销)。在 PyMySQL 中,你可以使用数据库连接对象的 commit()rollback() 方法来执行事务。

以下是一个简单的示例代码,演示了如何在 PyMySQL 中执行事务:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

try:
    with connection.cursor() as cursor:
        # 开始事务
        connection.begin()

        # 执行多个 SQL 命令,这里仅作示例
        insert_sql_1 = "INSERT INTO table1 (column1, column2) VALUES (%s, %s)"
        insert_sql_2 = "INSERT INTO table2 (column3, column4) VALUES (%s, %s)"

        # 执行第一个插入操作
        cursor.execute(insert_sql_1, ('value1', 'value2'))

        # 执行第二个插入操作
        cursor.execute(insert_sql_2, ('value3', 'value4'))

    # 提交事务
    connection.commit()

except Exception as e:
    # 如果出现异常,回滚事务
    connection.rollback()
    print(f"An error occurred: {e}")

finally:
    # 关闭数据库连接
    connection.close()

在上述示例中,我们首先通过 connection.begin() 开启了一个事务。然后,在 try 块中执行了两个插入操作。如果所有操作顺利完成,就会通过 connection.commit() 提交事务。如果其中任何一步出现了异常,connection.rollback() 会回滚事务,使所有操作都不会生效。

通过使用事务,可以确保在执行一系列相关操作时,要么全部成功,要么全部失败。这对于确保数据的完整性和一致性非常重要。

错误处理

在使用 PyMySQL 进行数据库操作时,错误处理是非常重要的。可以通过 try-except 块来捕获可能出现的异常,并根据具体情况进行适当的错误处理。以下是一个示例代码,演示了如何在 PyMySQL 中进行错误处理:

python 复制代码
import pymysql

# 连接到数据库
connection = pymysql.connect(host='your_host',
                             user='your_username',
                             password='your_password',
                             database='your_database_name',
                             port=3306)  # MySQL默认端口为3306

try:
    with connection.cursor() as cursor:
        # 查询数据库
        sql = "SELECT * FROM users"
        cursor.execute(sql)
        result = cursor.fetchall()

        # 处理查询结果
        for row in result:
            print(row)

except pymysql.Error as e:
    print(f"Error occurred: {e}")

finally:
    # 关闭数据库连接
    connection.close()

在上述示例中,使用 try-except 块捕获了可能出现的 pymysql.Error 异常。如果发生了异常,程序会打印错误信息。这样可以确保即使在程序执行过程中出现了问题,也能够对错误进行处理,而不会导致程序崩溃。

除了在连接和操作数据库时进行错误处理,还可以根据具体操作进行更细致的错误处理。例如,在插入数据时,可以检查插入操作是否成功并处理可能出现的异常情况。在更新或删除数据时也可以采取类似的方式进行错误处理。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

相关推荐
Hylan_J3 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
月光水岸New3 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
软件黑马王子3 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
莫忘初心丶3 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
我爱松子鱼3 小时前
mysql之规则优化器RBO
数据库·mysql
闲猫3 小时前
go orm GORM
开发语言·后端·golang
李白同学5 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
人间打气筒(Ada)5 小时前
MySQL主从架构
服务器·数据库·mysql
和道一文字yyds5 小时前
MySQL 中的索引数量是否越多越好?为什么?如何使用 MySQL 的 EXPLAIN 语句进行查询分析?MySQL 中如何进行 SQL 调优?
数据库·sql·mysql
黑子哥呢?6 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash