浅学pymysql

news/2024/4/16 14:57:50/文章来源:https://blog.csdn.net/weixin_53285092/article/details/136537983

pymysql

连接到MySQL数据库

使用pymysql.connect()函数连接到MySQL数据库服务器。你需要提供数据库的一些连接参数,如主机名、端口、用户名、密码和数据库名。

import pymysqlconn = pymysql.connect(host='localhost',user='your_username',password='your_password',database='your_database'
)

创建游标

游标(Cursor)对象在数据库编程中扮演着至关重要的角色,它是用于执行SQL语句并管理从数据库中获取的数据的主要接口。在pymysql库中,游标对象支持多种操作,包括执行SQL命令、迭代结果集、获取结果等。以下是游标对象的一些主要操作:

在执行任何SQL操作之前,首先需要从连接对象中创建一个游标对象:

cursor = conn.cursor()

pymysql还允许你指定游标的类型,例如,使用pymysql.cursors.DictCursor可以使得结果以字典形式返回,而不是默认的元组形式。

cursor = conn.cursor(pymysql.cursors.DictCursor)

使用参数化查询

为了避免SQL注入,建议使用参数化查询。这意味着在SQL语句中使用占位符(%s),然后提供一个元组作为execute()方法的第二个参数,其中包含了要插入到SQL语句中的实际值。

sql = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
cursor.execute(sql, ('value1', 'value2'))

执行SQL语句

游标对象的execute()方法用于执行单条SQL语句。它接受一个SQL语句字符串作为参数,并可以选择接受一个参数元组或字典作为SQL语句的参数,也可以使用游标对象的execute()方法执行SQL语句,比如SELECT, INSERT, UPDATE, DELETE等。

cursor.execute("SELECT * FROM table_name WHERE column_name = %s", (value,))
# 执行SQL查询
cursor.execute('SELECT * FROM your_table')# 获取查询结果
results = cursor.fetchall()
for row in results:print(row)# 插入数据
sql = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
cursor.execute(sql, ('value1', 'value2'))# 提交事务以保存更改
conn.commit()

批量执行SQL语句

executemany()方法用于执行相同的SQL语句多次,每次使用不同的参数。这对于批量插入数据非常有用。

sql = "INSERT INTO table_name (column1, column2) VALUES (%s, %s)"
values = [('value1_1', 'value2_1'), ('value1_2', 'value2_2')]
cursor.executemany(sql, values)
#execute+many,执行多次,把元组遍历完

滚动

scroll()方法用于移动游标到结果集中的指定位置。它接受一个值作为参数,指定要滚动的行数,和一个模式mode(默认为relative,相对当前位置移动;absolute表示从结果集的开始处移动)。

cursor.scroll(1, mode='relative')  # 向前移动一行
cursor.scroll(-1, mode='relative') # 向后移动一行
cursor.scroll(0, mode='absolute')  # 移动到结果集的开始

关闭游标

完成操作后,应关闭游标以释放数据库资源。

cursor.close()

这些操作概述了pymysql中游标对象的主要用法,使得执行SQL语句、处理SQL查询结果、批量操作数据和滚动通过结果集变得简单。

connect.commit()

对于DDL语句(如CREATE, ALTER, DROP等)

  • DDL(Data Definition Language)语句:这类语句用于定义和修改数据库结构,如创建、修改、删除表和数据库。对于DDL语句,MySQL服务器会自动提交这些操作。换句话说,当你执行一个DDL语句(如创建表)时,该操作立即生效,不需要显式调用commit()来提交事务。

对于DML语句(如INSERT, UPDATE, DELETE等)

  • DML(Data Manipulation Language)语句:这类语句用于数据库记录的增加、修改、删除等操作。如果你的操作包含DML语句,并且你想要这些更改持久化到数据库中,那么在这种情况下需要调用connect.commit()来提交事务。如果在执行DML操作后没有调用commit(),那么这些更改在数据库层面上不会被保存,如果连接关闭或者出现其他一些情况,这些未提交的更改可能会丢失。

自动提交

  • 自动提交模式:某些数据库配置或连接设置可能默认为自动提交模式。在自动提交模式下,每个DML语句执行后都会自动提交。但是,默认情况下,pymysql连接是不开启自动提交的。如果你想开启自动提交,可以在建立连接后设置connect.autocommit(True)

结论

对于你的情况,由于你只执行了CREATE DATABASECREATE TABLE这类DDL语句,实际上是不需要调用connect.commit()的,因为这些操作会被MySQL自动提交。然而,保留connect.commit()在你的代码中并不会引发错误,只是在此场景下它是多余的。如果未来你的脚本包含了DML操作,确保适时调用connect.commit()来提交这些更改。

当然,pymysql是一个Python库,它用于连接MySQL数据库服务器,执行SQL语句并管理数据库中的数据。这个库提供了一种方便的方式来使用Python操作MySQL数据库。以下是pymysql的一些基本用法,包括连接数据库、执行SQL命令、处理查询结果等。

处理查询结果

  • cursor.fetchone(): 获取查询结果的下一行。
  • cursor.fetchall(): 获取查询结果中的所有行。
  • cursor.fetchmany(size): 获取查询结果中的size行。

关闭游标和连接

操作完成后,应该关闭游标和连接。

cursor.close()
conn.close()

关闭游标(Cursor)是数据库操作的一个重要环节,主要基于以下几个原因:

  1. 资源管理:在数据库系统中,游标是一种占用服务器资源的对象。每个游标在使用后都会占用一定的内存和数据库连接资源。如果不及时释放这些资源,随着游标数量的增加,会消耗更多的数据库资源,进而影响数据库服务器的性能。

  2. 防止内存泄露:在许多数据库接口中,游标对象在使用完毕后不会自动回收其占用的资源。长时间或频繁地使用游标而不关闭,会导致内存泄露,这在长时间运行的应用中尤为严重。

  3. 维持数据库连接的健康:打开的游标关联着数据库连接。如果游标未关闭,相关的数据库连接可能也会保持在打开状态,限制了连接池中可用连接的数量。及时关闭游标有助于确保连接池中的连接可以被有效管理和重用。

  4. 事务控制:在某些数据库系统中,未关闭的游标可能会持有锁或其他事务资源,这可能会导致事务持续时间过长,增加死锁的风险,以及影响数据库的并发性能。

  5. 遵循最佳实践:关闭游标是良好的编程实践的一部分,这有助于编写出更加清晰、可维护和高效的数据库应用程序。它使代码更加稳定,减少因资源泄露导致的问题,提高了应用程序的可靠性。

因此,为了优化资源使用、提高应用性能和避免潜在的问题,开发人员在使用完游标后应该总是确保及时关闭它。这通常是通过在代码中显式调用游标的close()方法来实现的,最好在finally块中或使用Python的with语句上下文管理器来保证,无论操作成功还是遇到异常,游标都能被正确关闭。

错误处理

在执行数据库操作时,可能会遇到各种错误,例如语法错误、连接错误等。使用try...except语句来处理这些潜在的错误是一个好习惯。

在数据库中使用错误处理很重要

try:cursor.execute(sql)conn.commit()
except pymysql.Error as e:print(f"Database error: {e}")conn.rollback()  #最好加一个rollback
finally:cursor.close()conn.close()

这些是pymysql的一些基本用法,涵盖了连接数据库、执行SQL命令、处理结果和错误处理等方面。正确使用这些基本功能,可以帮助你高效地在Python程序中操作MySQL数据库。

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

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

相关文章

DevStack 基于 Ubuntu 部署 OpenStack

Devstack 简介 DevStack 是一系列可扩展的脚本,用于基于 git master 的最新版本快速调出完整的 OpenStack 环境。devstack 以交互方式用作开发环境和 OpenStack 项目大部分功能测试的基础。 devstack 透过执行 stack.sh 脚本,搭建 openstack 环境&…

Guitar Pro 8.1中文版永久许可证激活2024最新24位注册激活码生成器

Guitar Pro是一款非常受欢迎的音乐制作软件,它可以帮助用户创建和编辑各种音乐曲谱。从其诞生以来就送专门为了编写吉他谱而研发迭代的。 尽管这款产品可能已经成为全球最受欢迎的吉他打谱软件,在编写吉他六线谱和乐队总谱中始终处于行业领先地位&#…

“色狼”用英语怎么说?柯桥日常英语,成人英语口语学习

最近有粉丝问我"色狼"英文翻译是啥 首先声明不是"colour wolf"哈 关于“色狼”的英文表达有很多 快和C姐一起来看看吧! 1.pervert 这个单词的意思是变态、色狼 是对性变态者最直观的描述 He is such a pervert! I saw him lo…

VMware 集群-虚拟机配置反亲和性(互斥)

简介 博客:https://songxwn.com/ 为实现应用系统的冗余,经常会双机或者多机部署(如数据库集群等)。在VMware 集群里面,要保证不同应用集群的节点虚拟机在不同的物理宿主机上,防止单个宿主机故障&#xff…

数据结构之单链表详解(C语言手撕)

​ 🎉个人名片:🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN…

【开源】SpringBoot框架开发数据可视化的智慧河南大屏

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏,包含了GDP、…

连接kafka报错:java.io.IOException: Can‘t resolve address:

修改电脑host文件:C:\Windows\System32\drivers\etc\hosts 加上一行 192.168.1.XXX MHA_SLAVE2(192.168.1.XXX 这个是安装kafka 的服务器地址,MHA_SLAVE2是kafka的容器id)

【数据结构与算法】二分查找题解(二)

这里写目录标题 一、81. 搜索旋转排序数组 II二、167. 两数之和 II - 输入有序数组三、441. 排列硬币四、374. 猜数字大小五、367. 有效的完全平方数六、69. x 的平方根 一、81. 搜索旋转排序数组 II 中等 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必…

c++ 二分查找(迭代与递归)

二分搜索被定义为一种在排序数组中使用的搜索算法,通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息,将时间复杂度降低到O(log N)。 二分查找算法示例 何时在数据结构中应用二分查找的条件: 应用二分查找算法:…

(C语言)sizeof和strlen的对比(详解)

sizeof和strlen的对⽐(详解) 1. sizeof sizeof是用来计算变量所占内存空间大小的, 单位是字节,如果操作数是类型的话,计算的是用类型创建的变量所占空间的大小。 sizeof 只关注占用内存空间的大小 ,不在乎内…

Rust结构体讲解学习,以及impl结构体方法和结构体关联函数

Rust 中的结构体(Struct)与元组(Tuple)都可以将若干个类型不一定相同的数据捆绑在一起形成整体,但结构体的每个成员和其本身都有一个名字,这样访问它成员的时候就不用记住下标了。元组常用于非定义的多值传…

表单提交 滚动到必填校验位置

handleCommit(flag) {this.$refs["form"].validate((valid, object) > {if (valid) {this.form.checkState flag;this.form.checkLevel 1;this.form.type 1; //规划this.form.filingsId this.form.id;checkFilings(this.form).then((response) > {this.$mo…

list链表的创建,排序,插入, test ok

1. 链表的建立&#xff0c;打印 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stack> #include <iostream> #include <string.h> #include <string>using namespace std;struct node {int data;s…

后量子时代,未来密码该何去何从?

古有飞鸽&#xff0c;现有网络&#xff0c;在知识经济为基础的信息化社会中&#xff0c;保障网络信息安全无疑成为成为国与国之间无形的较量。小到个人通讯&#xff0c;大到机要信息传输&#xff0c;信息安全对于国家安全和经济活动正常运转至关重要。密码学作为保障网络与信息…

Windows®、Linux® 和 UNIX® 系统都适用的远程桌面工具 OpenText ETX

Windows、Linux 和 UNIX 系统都适用的远程桌面工具 OpenText ETX 为 Windows、Linux 和 UNIX 实施精益、经济高效的虚拟化&#xff1b;提供完整的远程 Windows 可用性&#xff1b;以类似本地的性能远程工作&#xff1b;安全地保护系统和知识产权&#xff08;IP&#xff09;&am…

什么是TikTok账号权重?打破TikTok0播放的方法

许多TikTok账号运营者都会遇到一个难题&#xff0c;那就是视频要么播放量很低&#xff0c;要么0播放&#xff01;不管内容做的多好&#xff0c;最好都是竹篮打水一场空&#xff01;其实你可能忽略了一个问题&#xff0c;那就是账号权重。下面好好跟大家讲讲这个东西&#xff01…

【kubernetes】关于k8s集群的配置资源(configmap和secret)

目录 一、Secret 类型一&#xff1a;kubernetes.io/service-account-token 类型二&#xff1a;普通类型secret&#xff0c; ●Opaque&#xff0c;base64 编码格式的 Secret&#xff0c;用来存储用户自定义的密码、密钥等&#xff0c;默认的 Secret 类型; 类型三&#xff1a;…

【数据结构】二、线性表:6.顺序表和链表的对比不同(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))

文章目录 6.对比&#xff1a;顺序表&链表6.1逻辑结构6.2物理结构&#xff08;存储结构&#xff09;6.2.1顺序表6.2.2链表 6.3数据运算&#xff08;基本操作&#xff09;6.3.1初始化6.3.2销毁表6.3.3插入、删除6.3.4查找 6.对比&#xff1a;顺序表&链表 6.1逻辑结构 顺…

管理技巧 | 提升团队效能:如何与下属进行有效沟通

本文节选霍格沃兹测试开发学社沟通管理公开课- 某外企PMO Angelia老师的分享 在日常的管理工作中&#xff0c;沟通作为一项基础而关键的技能&#xff0c;往往决定了团队的协作效率和目标达成率。作为一个曾经从基层员工一路成长为管理者的Angelia老师&#xff0c;深知沟通的艺术…

jmap-各种option参数说明

基本情况 jmap&#xff08;JVM Memory Map&#xff09;&#xff1a;作用一方面是获取dump文件&#xff08;堆转储快照文件&#xff0c;二进制文件&#xff09;&#xff0c;它还可以获取目标Java进程的内存相关信息&#xff0c;包括Java堆各区域的使用情况、堆中对象的统计信息…