当前位置: 首页 > news >正文

pymysql模块

1.pymysql基本使用

  • 打开数据库连接,
  • 使用cursor()方法获取操作游标
  • 执行SQL语句
  • 获取命令执行的查询结果

1.1 打开数据库连接

# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',user='root',port=3306,password="123",database='db5')

1.2 使用cursor()方法获取操作游标

cursor()方法获取操作游标,同时可以指定参数"cursor=pymysql.cursors.DictCursor"将查询结果以字典的形式返回.不添加的时候,查询的结果以元祖返回

# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)

1.3 执行SQL语句

执行sql语句之后,返回的是当前sql语句影响的行数

# 定义SQL语句
sql = "select * from emp;"
# 执行SQL语句
res = cursor.execute(sql)  # 返回的是当前sql语句影响的行数
# print(res) => 10

1.4 获取命令执行的查询结果

这三条方法读取数据类似于文件光标的移动,移动到位置之后只能够读取之后的数据.同时可以使用cursor.scroll(1). cursor.scroll(1,"absolute")改变游标所在的位置

  • cursor.fetchone(),获取一条数据
  • cursor.fetchall(),获取所有数据
  • cursor.fetchmany(5),可以指定拿几条
  • cursor.scroll(1),相对于光标所在的位置继续往后移动1
  • cursor.scroll(1,"absolute"),相对于数据的开头所在的位置继续往后移动1
print(cursor.fetchone())  # 只拿一条
cursor.scroll(1)  # 相对于光标所在的位置继续往后移动1
print(cursor.fetchall())  # 拿所有
cursor.scroll(1,"absolute") # 相对于数据的开头所在的位置继续往后移动1
print(cursor.fetchmany(5))  # 可以指定拿几条

2.sql注入及解决方法

SQL注入是一种恶意的攻击技术.攻击者通过在用户输入或是其他数据插入点,插入恶意的SQL语句,利用应用程序对用户输入数据验证不足的漏洞,来欺骗数据库执行非预期的命令.

创建users表

create table users(id int primary key,name varchar(16) not null,age int not null
);alter table users add passwd char(16) not null;insert into users values(1,"zs",10,"123"),(2,"lisi",12,"456"),(3,"wu",13,"3333");

b4c634d3ee90492796f067a22ef082f6.png

sql的语句和输入的参数相关

import pymysql# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',user='root',port=3306,password="123",database='db5')# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
"""
cursor=pymysql.cursors.DictCursor 将查询结果以字典的形式返回
"""username = input("输入用户名>>")
passwd = input("输入密码>>")# 定义SQL语句
sql = "select * from users where name='%s' and passwd='%s'"%(username,passwd)
print(sql)
# 执行SQL语句
res = cursor.execute(sql)  # 返回的是当前sql语句影响的行数if res:print("登陆成功!!")print(cursor.fetchall())
else:print("用户名或是密码错误")

8c14fee2a3b046f091122fc9bc3b5aff.png

恶意输入:

5a47c16480894c3994e3244a878d0112.png

5da81531f38540338544f928af4b7389.png 解决方式:

日常生活中很多软件在注册的时候不能含有特殊符号.

敏感的数据不要自己做拼接,书写sql语句时先用%s占位符,之后将需要拼接的数据直接交给execute方法即可

import pymysql# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',user='root',port=3306,password="123",database='db5')# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
"""
cursor=pymysql.cursors.DictCursor 将查询结果以字典的形式返回
"""username = input("输入用户名>>")
passwd = input("输入密码>>")# 定义SQL语句
sql = "select * from users where name=%s and passwd=%s"
print(sql)
# 执行SQL语句
res = cursor.execute(sql,(username,passwd))  # 自动识别sql语句里面的%sif res:print("登陆成功!!")print(cursor.fetchall())
else:print("用户名或是密码错误")

b1cabfea72924535a788cbe7791032ee.png

3.pymysql基本操作 

在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。

commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务.

当前的事务设置的是手动提交,我们要结束事务只能是结束事务或是回滚事务.所以在操作数据的增删改时,都需要提交或是回滚事务,实现的操作才能够对于数据库有效.

# _*_ coding utf-8 _*_
# george
# time: 2024/11/18上午11:03
# name: pymysql基础操作.py
# comment:
import pymysql# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',user='root',port=3306,password="123",database='db5')# 使用cursor()方法获取操作游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)# 增
# sql = "insert into users values(%s,%s,%s,%s)"
#
# res = cursor.execute(sql, (4, "zl", 15, "2222"))
# db.commit()  # 确认# 改
# sql2 = "update users set age=%s where name=%s"
# res2 = cursor.execute(sql2, (20, "zs"))
# print(res2)
# db.commit()# 删
try:sql3 = "delete from users where id=%s"res2 = cursor.execute(sql3, (4,))db.commit()print(res2)
except:db.rollback()# 查
# sql4 = "select * from users"
# res2 = cursor.execute(sql4)
# print(cursor.fetchall())

 

 

相关文章:

pymysql模块

1.pymysql基本使用 打开数据库连接,使用cursor()方法获取操作游标执行SQL语句 获取命令执行的查询结果 1.1 打开数据库连接 # 打开数据库连接 db pymysql.connect(host127.0.0.1,userroot,port3306,password"123",databasedb5) 1.2 使用cursor()方法获取操作游…...

WPF-模板和样式

在 WPF(Windows Presentation Foundation)中,模板是一种强大的机制,用于定义控件的外观。它允许你将控件的逻辑(功能)和外观(UI)分离开来。例如,一个按钮控件&#xff0c…...

网络编程 day1.2~day2——TCP和UDP的通信基础(TCP)

笔记脑图 作业&#xff1a; 1、将虚拟机调整到桥接模式联网。 2、TCP客户端服务器实现一遍。 服务器 #include <stdio.h> #include <string.h> #include <myhead.h> #define IP "192.168.60.44" #define PORT 6666 #define BACKLOG 20 int mai…...

element ui table 每行不同状态

table 每行定义值 tableData: [ { name: ,type:,location:, ziduan:,createtype:,ziduanvalue:,checkAll:true,checkedCities: [空, null, str随机, int随机],isIndeterminate: true,table_id:single,downloaddisabled:true,deldisabled:true} ], table c…...

力扣--LRC 142.训练计划IV

题目 给定两个以 有序链表 形式记录的训练计划 l1、l2&#xff0c;分别记录了两套核心肌群训练项目编号&#xff0c;请合并这两个训练计划&#xff0c;按训练项目编号 升序 记录于链表并返回。 注意&#xff1a;新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&am…...

windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...

开发环境&#xff1a;windows10 qt5.14&#xff0c; 编译器msvc2017x64&#xff0c;CMake3.30&#xff1b; 现象&#xff1a; CMakeList文件里&#xff0c;如有find_package(Qt5 COMPONENTS Widgets REQUIRED) target_link_libraries(dis_lib PRIVATE Qt5::Widgets) 用CMak…...

【element-tiptap】Tiptap编辑器核心概念----结构篇

core-concepts 前言&#xff1a;这篇文章来介绍一下 Tiptap 编辑器的一些核心概念 &#xff08;一&#xff09;结构 1、 Schemas 定义文档组成方式。一个文档就是标题、段落以及其他的节点组成的一棵树。 每一个 ProseMirror 的文档都有一个与之相关联的 schema&#xff0c;…...

半导体工艺与制造篇3 离子注入

离子注入工艺 一般掺杂的杂质类别&#xff0c;包括:提供载流子的施主杂质和受主杂质;产生复合中心的重金属杂质 离子注入往往需要生成井well&#xff0c;其中井的定义&#xff1a;晶圆与杂质之间形成的扩散层或杂质与杂质之间形成的扩散层 离子注入的目的&#xff1a;用掺杂改…...

利用开源的低代码表单设计器FcDesigner高效管理和渲染复杂表单结构

FcDesigner 是一个强大的开源低代码表单设计器组件&#xff0c;支持快速拖拽生成表单。提供丰富的自定义及扩展功能&#xff0c;FcDesigner支持多语言环境&#xff0c;并允许开发者进行二次开发。通过将表单设计输出为JSON格式&#xff0c;再通过渲染器进行加载&#xff0c;实现…...

淘宝 NPM 镜像源

npm i vant/weapp -S --production npm config set registry https://registry.npmmirror.com 要在淘宝 NPM 镜像站下载项目或依赖&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 设置淘宝 NPM 镜像源 首先&#xff0c;你需要设置淘宝 NPM 镜像源以加速下载。可以通过…...

i春秋-GetFlag(md5加密,字符串比较绕过)

练习平台地址 竞赛中心 题目描述 题目内容 你好&#xff0c;单身狗&#xff0c;这是一个迷你文件管理器&#xff0c;你可以登录和下载文件&#xff0c;甚至得到旗帜 点击登录 发现capture需要满足条件substr(md5(captcha), 0, 6)xxxxxx 编写python脚本破解验证码 import has…...

SpringBoot中设置超时30分钟自动删除元素的List和Map

简介 在 Spring Boot 中&#xff0c;你可以使用多种方法来实现自动删除超时元素的 List 或 Map。以下是两种常见的方式&#xff1a; 如果你需要简单的功能并且不介意引入外部依赖&#xff0c;可以选择 Guava Cache。如果你想要更灵活的控制&#xff0c;使用 Spring 的调度功能…...

入门车载以太网(6) -- XCP on Ethernet

目录 1.寻址方式 2.数据帧格式 3.特殊指令 4.使用实例 了解了SOME/IP之后&#xff0c;继续来看看车载以太网在汽车标定领域的应用。 在汽车标定领域XCP是非常重要的协议&#xff0c;咱们先来回顾下基础概念。 XCP全称Universal Measurement and Calibration Protocol&a…...

DAY4 网络编程(广播和多线程并发)

作业1&#xff1a; 1、将广播发送和接收端实现一遍&#xff0c;完成一个发送端发送信息&#xff0c;对应多个接收端接收信息实验。 send.c代码&#xff1a; #include <myhead.h> #define IP "192.168.61.255"//广播IP #define PORT 7777 int main(int argc, …...

C++个人复习(4)

C中为什么要引入make_shared,它有什么优点 1. 减少内存分配次数 使用 make_shared 时&#xff0c;内存分配只发生一次&#xff0c;它同时分配了对象和控制块&#xff08;用于管理引用计数等信息&#xff09;。而如果直接使用 new 创建对象并传递给 shared_ptr&#xff0c;则会…...

Dockerhub镜像加速

一、背景 dockerhub由于被封锁和站点处于国外的原因&#xff0c;docker pull拉取镜像非常慢&#xff0c;有时候直接都无法拉取。严重妨碍了我们的学习进度以及日常使用。 总结了一些proxy代理的镜像站点&#xff0c;配置之后速度会有明显提升&#xff0c;大家可以参考使用。 二…...

11.20讲座笔记

信息门户 -------- 人才培养方案&#xff08;重要&#xff09; 结构化矛盾------需求方&#xff08;企业&#xff09; ------供给方&#xff08;高校&#xff09; 电子方向职业 -------- 基建、基础算力 -------中国 1st &#xff08;已经相对完善饱和&#xff09; 网…...

网络协议之UDP

一、UDP协议定义 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种面向无连接的、不可靠的、基于数据报的传输层通信协议。UDP在传输数据时不需要建立连接&#xff0c;直接将数据包发送出去。这种特性使得UDP在实时性要求较高的应用场景中…...

Elasticsearch面试内容整理-常见问题和解决方案

在使用 Elasticsearch 的过程中,可能会遇到各种常见问题,如集群状态异常、分片未分配、查询性能低下等。这些问题往往影响系统的可用性和性能,因此理解这些问题的成因和解决方案非常重要。以下是 Elasticsearch 常见问题及其解决方案的整理。 集群状态问题 Elasticsearch 集…...

React 表单Form 中的 useForm

1、介绍 useForm 是 React Hook Form 中的核心 Hook&#xff0c;用于管理表单的状态和行为。它提供了处理表单验证、数据收集、状态管理等功能的简便方法。useForm 本质上是用于创建和配置表单&#xff0c;并允许你在组件中与表单字段交互。 2、基本用法 useForm 是一个函数…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...