浅学pymysql

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.mzph.cn/news/729737.shtml

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

相关文章

阿里云服务器怎么使用?3分钟搭建网站教程2024新版

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

设计模式学习笔记 - 设计原则 - 10.实战:针对非业务的通用框架开发,如何做需求分析和设计及如何实现一个支持各种统计规则的性能计数器

前言 接下来我们在结合一个支持各种统计规则的性能计数项目,学习针对一个非业务的通用框架开发,如何来做需求分析、设计和实现,同时学习如何灵活应用各种设计原则。 项目背景 设计开发一个小的框架,能够获取接口调用的各种统计信…

编程笔记 html5cssjs 003 协作、约定与标准 50以内的乘法算式

编程笔记 html5&css&js 003 协作、约定与标准 50以内的乘法算式 一、代码二、解释 综合应用代码示例。50以内的乘法算式。 一、代码 <!DOCTYPE html> <html lang"en"> <head><title>20以内的乘法</title><meta charset&qu…

RocketMQ的事务消息是如何实现的?

RocketMQ的事务消息是通过 TransactionListener接口来实现的。 在发送事务消息时,首先向RocketMQ Broker 发送一条‘half消息’(半消息),半消息将被存储在broker端的事务消息日志中,但是这个消息还不能被消费者消费。 接下来,在半消息发送成功后,应用程序通过执行本地事务…

C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题 给定一个未排序的数组&#xff0c;任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转&#xff08;arr&#xff0c;i&#xff09;&#xff1a;将数组从0反转为i 示例&#xff1a; 输入&#xff1a;arr[]{23、10、20、11、12、6、7} 输出&#xff1a…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件&#xff0c;没有严格的项目结构目录&#xff0c;但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少&#xff1a;name、version、mainfest_version&#xff1b; // 清单文件的版本&#xff0c;这个必须写…

查看Linux服务器配置

# chkconfig --list # 列出所有系统服务 # chkconfig --list | grep on # 列出所有启动的系统服务 # ifconfig # 查看所有网络接口的属性 # iptables -L # 查看防火墙设置 # route -n # 查看路由表 # netstat -lntp # 查看所有监听端口 # netstat -antp # 查看所有已经建立的连…

二叉搜索树(BST)的创建及增,删,查,改(详解)

目录 初识二叉搜索树&#xff08;BST&#xff09;&#xff1a; 二叉搜索树查找元素&#xff1a; 二叉搜索树修改元素: 二叉搜索树中的增加元素&#xff1a; 二叉搜索树中的删除元素&#xff1a; 初识二叉搜索树&#xff08;BST&#xff09;&#xff1a; 一张图简要概括二…

Qt桌面白板工具其三(解决半透明桌面画布刷新透明像素时产生耗时,导致的画笔卡顿问题)

一、问题 前两篇文章写了很多有关桌面画板的实现方法&#xff0c;这个过程中&#xff0c;画笔的卡顿问题还是无法彻底解决。 先简单回顾一下我实现桌面画板的逻辑&#xff1b; 1.父窗口&#xff1a;一个透明窗口&#xff0c;通过设置带有透明度的QColor bg_color&#xff0c;以…

高级语言讲义2016计专(仅高级语言部分)

1.斐波那契序列的第n项可以表示成以下形式&#xff0c;编写一个非递归函数&#xff0c;返回该数列的第n项的数值 #include <stdio.h>int func(int n) {if(n1||n2)return 1;int p1,q1,num;for(int i3; i<n; i) {numpq;qp;pnum;}return num; } 2.在MXN的二维数组A中&am…

Django框架连接数据库

这里以同时连接sqlite、mysql、redis为例 首先要下载对应的sqlite、mysql、redis相应的模块插件 开始上代码 settings.py 配置文件 import os # 引入mysql模块 import pymysql # pymysql.install_as_MySQLdb()来确保pymysql能够兼容这些代码 pymysql.install_as_MySQLdb()# 数…

Go中的控制反转 IoC

以嵌入组合的方式实现控制反转 IoC: 控制反转是一种解耦思想&#xff0c;将原本耦合在业务逻辑中的控制逻辑单独拆出来实现&#xff0c;不再让业务逻辑在处理业务的同时还要去实现控制逻辑&#xff0c;而是专注处理业务。在业务逻辑代码中耦合进控制逻辑&#xff0c;会导致在编…

window搭建本地mongo数据库并导入数据

1 window下载mongo数据库 官网&#xff1a;www.mongodb.com 选择 Products > Community Edition 就能进入社区版 在这里下载 windows 版对应的安装包 注意&#xff1a;6.0.1 版本的 MongoDB 配置环境变量有问题&#xff0c;并且我不知道怎么解决&#xff0c;如果想要避免出…

算法学习05:离散化、区间合并

算法学习05&#xff1a;离散化、区间合并 文章目录 算法学习05&#xff1a;离散化、区间合并前言需要记忆的模版&#xff1a;一、离散化1.例题&#xff1a;离散化 区间和&#xff1a;拓展: 二、区间合并&#xff08;贪心&#xff09;1.例题&#xff1a; 总结 前言 需要记忆的模…

基于FastAPI构造一个AI模型部署应用

前言 fastapi是目前一个比较流行的python web框架&#xff0c;在大模型日益流行的今天&#xff0c;其云端部署和应用大多数都是基于fastapi框架。所以掌握和理解fastapi框架基本代码和用法尤显重要。 需要注意的是&#xff0c;fastapi主要是通过app对象提供了web服务端的实现代…

tidyverse提取MergedGenes列包含“sss“字符的行

要使用tidyverse包在R中提取包含特定字符串“sss”字符的MergedGenes列的行&#xff0c;可以使用dplyr包中的filter()函数和str_detect()函数来实现。这里的str_detect()函数来自stringr包&#xff0c;它是tidyverse的一部分&#xff0c;用于检测字符串是否符合给定的模式。以下…

基于php的用户登录实现(v1版)(持续迭代)

目录 版本说明 数据库连接 登录页面&#xff1a;login.html 登录处理实现&#xff1a;login.php 用户欢迎页面&#xff1a;welcome.php 用户注册页面&#xff1a;register.html 注册执行&#xff1a;DoRegister.php 版本说明 v1实现功能&#xff1a; 数据库连接&#x…

SOCKS5代理与网络安全的舞蹈

在这个信息爆炸的时代&#xff0c;网络安全成为了每个网民乃至每个软件工程师的头等大事。今天&#xff0c;我们要聊的是如何使用SOCKS5代理和代理IP来保护我们的网络安全&#xff0c;同时还不失趣味性。这听起来可能有点枯燥&#xff0c;但别担心&#xff0c;我们会用一种轻松…

自定义限流注解

自定义注解 /*** 速率限制注解** author: 张定辉* date: 2024/3/5 21:29* description: 速率限制注解*/ Target({ElementType.TYPE,ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface RateLimit {/*** SPEL表达式* <p>* 1.使用方法的基本类型参…

SpringAOP面向切面编程-代理

目录 1.静态代理 2.动态代理 代理在开发中实现的方式具体有两种&#xff1a;静态代理&#xff0c;[动态代理技术] 1.静态代理 主动创建代理类 public class CalculatorStaticProxy implements Calculator {// 将被代理的目标对象声明为成员变量private Calculator target;…