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

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

安装#pip3 install pymysql 在cmd终端上执行

一 链接、执行sql、关闭(游标)

import pymysqluser=input('用户名:').strip()pwd=input('密码').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帮我们做字符串拼接)sql=‘select * from userinfo where name=%s and password=%s ’#!!!注意%s需要去掉引号,因为pymysql会自动为我们加上res=cursor.execute(sql,(user,pwd))#pymysql模块自动帮我们解决sql注入问题,只要我们按照pymysql的规定来

三 增,删,改:conn.commint()

import pymysql#链接conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')#游标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"),("lhf","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)'''
View Code

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

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

 

转载于:https://www.cnblogs.com/wuchenyu/p/9026213.html

你可能感兴趣的文章
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
Android 开发 ThreadPool(线程池) 总结
查看>>
【poj1568】 Find the Winning Move
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
TP框架中的page分页实现
查看>>
[转]跨越千年的RSA算法
查看>>
传奇学者应明生
查看>>
【程序执行原理】
查看>>
第二次项目冲刺(Beta阶段)5.24
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
poj 1183
查看>>
Dreamweaver cc新版本css单行显示
查看>>
Redis的Sorted Set有序集合命令
查看>>
【android】安卓的权限提示及版本相关
查看>>
3D重建的进阶了解---深度图,网格,体素,点云是什么
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>