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

    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默认端口为3306try: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默认端口为3306try: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.rhkb.cn/news/302559.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超图SuperMap-Cesium,地形图层,可以渲染一个或多个地形(地形可缓存DEM,TIN方式),webGL代码开发(2024-04-08)

1、缓存文件类型TIN格式&#xff0c;TIN的地形sct只能加一个 const viewer new Cesium.Viewer(cesiumContainer); viewer.terrainProvider new Cesium.CesiumTerrainProvider({isSct: true, // 是否为iServer发布的TIN地形服务,stk地形设置为falserequestWaterMask : true,…

【前沿模型解析】潜在扩散模型 2-2 | 手撕感知图像压缩基础块上下sample块

文章目录 1 DownSample下采样部分1.1 两种实现方式1.2 代码实现 2 UpSample上采样部分2.1 代码实现 1 DownSample下采样部分 1.1 两种实现方式 下采样&#xff0c;即改变特征图的尺寸 下采样的话源码实现了两种方式 方式一&#xff1a;是通过卷积实现下采样&#xff0c;我们…

谈谈什么是 Redis

&#x1f525;博客主页&#xff1a;fly in the sky - CSDN博客 &#x1f680;欢迎各位&#xff1a;点赞&#x1f44d;收藏⭐️留言✍️&#x1f680; &#x1f386;慢品人间烟火色,闲观万事岁月长&#x1f386; &#x1f4d6;希望我写的博客对你有所帮助,如有不足,请指正&#…

Linux(05) Debian 系统修改主机名

查看主机名 方法1&#xff1a;hostname hostname 方法2&#xff1a;cat etc/hostname cat /etc/hostname 如果在创建Linux系统的时候忘记修改主机名&#xff0c;可以采用以下的方式来修改主机名称。 修改主机名 注意&#xff0c;在linux中下划线“_”可能是无效的字符&…

软件测试学习之MySQL学习笔记(完结)

目录 1. 数据库**** 1.1. 概念**** 1.2. 分类**** 1.2.1. 关系型数据库**** 1.2.1.1. SQL**** 1.2.2. 安装**** 1.2.2.1. Navicat**** 2. SQL语句**** 2.1. 常用数据类型**** 2.2. 数据库**** 2.3. 表**** 2.3.1. 字段约束**** 2.4. 数据**** 2.4.1. 增 insert**…

JavaSE:图书管理系统

目录 一、前言 二、内容需求 三、类的设计 &#xff08;一&#xff09;图书类 1.Book 类 2.BookList 类 &#xff08;二&#xff09;操作类 1.添加图书AddOperation类 2.借阅图书BorrowOperation类 3.删除图书DelOperation类 4.显示图书ShowOperation类 5.退出系统Ex…

ChromeOS 中自启动 Fcitx5 和托盘 stalonetray

ChromeOS 更新的飞快&#xff0c;旧文章的方法也老是不好用&#xff0c;找遍了也没找到很好的可以开机自启动 Linux VM 和输入法、托盘的方法。 研究了一下&#xff08;不&#xff0c;是很久&#xff09;&#xff0c;终于找到个丑陋的实现。 方法基于 ChromeOS 123.0.6312.94…

linux 开机自启动

方式1—依赖桌面启动&#xff0c;一般适用与UI相关程序 1、创建运行脚本&#xff0c;以管理员放方式运行&#xff0c;加入密码 vim runapp.sh #!/bin/bash cd /home/nvidia/test echo ‘passcode’ | sudo -S ./testapp 2、终端输入 gnome-session-properties 3、在com…

os.listdir()bug总结

今天测试出一个神奇的bug&#xff0c;算是教训吧&#xff0c;找了两天不知道问题在哪&#xff0c;最后才发现问题出现在这 原始文件夹显示 os.listdir()结果乱序 import os base_path "./file/"files os.listdir(base_path)print(files)问题原因 解决办法(排序) …

即插即用篇 | YOLOv8引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块

本改进已集成到 YOLOv8-Magic 框架。 下采样操作如最大池化或步幅卷积在卷积神经网络(CNNs)中被广泛应用,用于聚合局部特征、扩大感受野并减少计算负担。然而,对于语义分割任务,对局部邻域的特征进行池化可能导致重要的空间信息丢失,这有助于逐像素预测。为了解决这个问题…

【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)

基于python语言&#xff0c;采用经典蚁群算法&#xff08;ACO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段…

智慧水库解决方案(打造水库智慧监测体系)

​作为一名水利自动化系统集成商,最近我司接手了一个智慧水库建设项目。这个项目位于一座山区的大型水库,目的是对其进行现代化、智能化改造,提升供水、防洪等管理水平。&#xff08;key-iot.com.cn&#xff09; 在方案设计之初,我们组织了现场勘测,全面了解水库的实际情况。这…

创建型模式--2.简单工厂模式【人造恶魔果实工厂1】

1. 工厂模式的特点 在海贼王中&#xff0c;作为原王下七武海之一的多弗朗明哥&#xff0c;可以说是新世界最大的流氓头子&#xff0c;拥有无上的权利和无尽的财富。他既是德雷斯罗萨国王又是地下世界的中介&#xff0c;控制着世界各地的诸多产业&#xff0c;人造恶魔果实工厂就…

基于springboot实现校园资料分享平台系统项目【项目源码+论文说明】

基于springboot实现校园资料分享平台系统演示 摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求&#xff…

吴恩达深度学习笔记:深层神经网络(Deep Neural Networks)4.1-4.4

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第四周&#xff1a;深层神经网络(Deep Neural Networks)4.1 深层神经网络&#xff08;Deep L-layer neural network&#xff09;4.2 前向传播和反向传播&#xff08;Forward and backward pro…

“逃离”OpenAI!36人出走,已拿600亿融资

“逃离”OpenAI&#xff01;36人出走&#xff0c;已拿600亿融资© 由 智东西 提供 智东西 作者 | 程茜 编辑 | 心缘 最近OpenAI频繁高薪挖人&#xff0c;把马斯克惹毛了。 马斯克在社交平台X上公开爆料&#xff1a;OpenAI一直在高薪挖特斯拉工程师&#xff0c;甚至还想…

四、书城开发-2、热门搜索/推荐页面的开发

热门搜索的开发 热门搜索页面的交互主要有4个交互点 第一个交互是点击搜索框时&#xff0c;热门搜索会渐影显示&#xff1b;第二个交互是点击返回图标时热门搜索会渐影消失&#xff1b;第三个交互是热门搜索滑动页面的时候搜索栏下面会出现阴影&#xff0c;回到顶部时阴影会消…

深入浅出 -- 系统架构之微服务标准组件及职责

我们来认识一下微服务架构在Java体系中依托哪些组件实现的。 相对于单体架构的简单粗暴&#xff0c;微服务的核心是将应用打散&#xff0c;形成多个独立提供的微服务&#xff0c;虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题&#xff1a; 1…

PDF锐化

PDF Shaper Ultimate(pdf转图片) 编辑->添加文件->选中一个要处理的pdf 操作->转换->PDF转为图片 ComicEnhancerPro设置(把图片锐化) PDF Shaper Ultimate(图片转pdf) 编辑-添加图片->选中所有锐化处理后的图片 转换->图片转为pdf&#xff08;会把所有图…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…