博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python--12、pymysql模块
阅读量:4345 次
发布时间:2019-06-07

本文共 3026 字,大约阅读时间需要 10 分钟。

安装pip3 install pymysql 使用方法(示例表为用户注册信息表):
import pymysqluser=input('username: ').strip()pwd=input('passwd: ').strip()链接conn=pymysql.connect(host='localhost',user='root',password='123',database='egon',charset='utf8')游标cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示。 把返回的结果集改成字典。#cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)执行sql语句sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引号print(sql)res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目print(res)cursor.close()conn.close()if res:    print('登录成功')else:    print('登录失败')

 

execute()之sql注入

注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符

根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'

 

最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name='egon';则--之后的条件被注释掉了#1、sql注入之:用户存在,绕过密码egon' -- 任意字符 ★用户名不存在的情况下依旧有办法登录。如下:#2、sql注入之:用户不存在,绕过用户与密码xxx' or 1=1 -- 任意字符

解决方法:

不要自己对sql进行字符串拼接# sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)# print(sql)# res=cursor.execute(sql)#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
增、删、改:conn.commit()
import pymysql#链接conn=pymysql.connect(host='localhost',user='root',password='123',database='exx')#游标cursor=conn.cursor()#执行sql语句#part1# sql='insert into userinfo(name,password) values("root","123456");'# res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数# print(res)#part2# sql='insert into userinfo(name,password) values(%s,%s);'# res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数# print(res)#part3sql='insert into userinfo(name,password) values(%s,%s);'res=cursor.executemany(sql,[("root","123456"),("qzz","12356"),("eee","156")]) #执行sql语句,返回sql影响成功的行数print(res)conn.commit() #提交后才发现表中插入记录成功cursor.close()conn.close()
查:fetchone,fetchmany,fetchall
import pymysql#链接conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')#游标cursor=conn.cursor()#执行sql语句sql='select * from userinfo;'rows=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询# cursor.scroll(3,mode='absolute') # 相对绝对位置移动# cursor.scroll(3,mode='relative') # 相对当前位置移动res1=cursor.fetchone()res2=cursor.fetchone()res3=cursor.fetchone()res4=cursor.fetchmany(2)res5=cursor.fetchall()print(res1)print(res2)print(res3)print(res4)print(res5)print('%s rows in set (0.00 sec)' %rows)conn.commit() #提交后才发现表中插入记录成功cursor.close()conn.close()'''(1, 'root', '123456')(2, 'root', '123456')(3, 'root', '123456')((4, 'root', '123456'), (5, 'root', '123456'))((6, 'root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))rows in set (0.00 sec)'''

 

获取插入的最后一条数据的自增ID

import pymysqlconn=pymysql.connect(host='localhost',user='root',password='123',database='egon')cursor=conn.cursor()sql='insert into userinfo(name,password) values("xxx","123");'rows=cursor.execute(sql)print(cursor.lastrowid) #在插入语句后查看conn.commit()cursor.close()conn.close()
 

转载于:https://www.cnblogs.com/jinyudong/p/8024222.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务...
查看>>
UI基础--烟花动画
查看>>
Android dex分包方案
查看>>
ThreadLocal为什么要用WeakReference
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>