day 7-21 pymysql模块
一、安装的两种方法
第一种:
#安装
pip3 install pymysql
第二种:
二、链接,执行sql,关闭(游标)
import pymysql user = input("username:").strip()
pwd = input("password:").strip() #1.先建立连接,然后拿到游标
conn=pymysql.connect(host="localhost",user="root",password="",
database="db7",charset="utf8" )
cursor =conn.cursor() #拿到游标 #2.执行sql sql = "select * from user where name='%s' and password = '%s';"%(user,pwd)
print(sql) rows = cursor.execute(sql) #拿到受影响的行数
print(rows)
#3.关闭游标
cursor.close()
#4.关闭连接
conn.close() if rows:
print("登录成功")
else:
print("登录失败")
三、execute()之sql注入
注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符
根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'
最后那一个空格,在一条sql语句中如果遇到select *
from t1 where id > 3 -- and name='jack';则--之后的条件被注释掉了 #1、sql注入之:用户存在,绕过密码
jack' -- 任意字符 #2、sql注入之:用户不存在,绕过用户与密码
xxx' or 1=1 -- 任意字符
解决注入
# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
# print(sql)
# rows=cursor.execute(sql) #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s
and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
rows=cursor.execute(sql,[user,pwd])
#pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
#2.防止注入 import pymysql user = input("username:").strip()
pwd = input("password:").strip() #1.先建立连接,然后拿到游标
conn=pymysql.connect(host="localhost",user="root",password="",
database="db7",charset="utf8" )
cursor =conn.cursor() #拿到游标 #2.执行sql sql = "select * from user where name=%s and password = %s;"
print(sql) rows = cursor.execute(sql,[user,pwd]) #在这里传入参数
print(rows)
#3.关闭游标
cursor.close()
#4.关闭连接
conn.close() if rows:
print("登录成功")
else:
print("登录失败")
防止注入
四、增、删、改:conn.commit()
增:
import pymysql # 1.连接拿到游标
conn=pymysql.connect(host="localhost",user="root",password="",
database="db7",charset="utf8"
)
cursor=conn.cursor() # 拿到游标,即mysql> # 2.执行sql
sql='insert into user (name,age,password) values(%s,%s,%s);'
print(sql)
# 2.1插入单条记录
# rows = cursor.execute(sql,["lucy",21,"123"])
# 2.3插入多条记录
rows=cursor.executemany(sql,[("ago",26,""),("Lili",23,"")])
conn.commit() # 这一步是提交到数据库的.如果没有这一步,上面的插入不生效
#3.关闭游标
cursor.close()
#4.关闭连接
conn.close()
删:
import pymysql #删
name = input("name:").strip()
# 1.连接拿到游标
conn=pymysql.connect(host="localhost",user="root",password="",
database="db7",charset="utf8"
)
cursor=conn.cursor() # 拿到游标,即mysql> # 2.执行sql
sql='delete from user where name = %s;'
print(sql)
rows = cursor.execute(sql,(name))
print('%s row in set (0.00 sec)'%rows)
#提交到数据库
conn.commit()
#3.关闭游标
cursor.close()
#4.关闭连接
conn.close()
改:
import pymysql #改
id = input("id:").strip()
# 1.连接拿到游标
conn=pymysql.connect(host="localhost",user="root",password="",
database="db7",charset="utf8"
)
cursor=conn.cursor() # 拿到游标,即mysql> # 2.执行sql
sql='update user set password ="999999" WHERE id = %s;'
print(sql)
rows = cursor.execute(sql,(id))
print('%s row in set (0.00 sec)'%rows)
#提交到数据库
conn.commit()
#3.关闭游标
cursor.close()
#4.关闭连接
conn.close()
五、查:fetchone,fetchmany,fetchall
import pymysql #查:fetchone,fetchmany,fetchall # 1.连接拿到游标
conn=pymysql.connect(host="localhost",user="root",password="",
database="db7",charset="utf8"
)
cursor=conn.cursor() # 拿到游标,即mysql>
注:如果当有很多条sql记录的时候,用上面的方式拿到游标,并不能显示字段信息.要使用下面的方式:
cursor=conn.cursor(pymysql.cursor.DictCursor)
# 2.执行sql
sql='select * from user;' rows = cursor.execute(sql) #单条查询
res1 = cursor.fetchone()
res2 = cursor.fetchone()
res3 = cursor.fetchone()
res4 = cursor.fetchone()
res5 = cursor.fetchone()
res6 = cursor.fetchone() #数据库里只有5条记录,没有第六条,输入None print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print(res6) #输入None #查询多条
res = cursor.fetchmany(4) #一次查询4条
print(res) #查询所有
res = cursor.fetchall()
print(res) #-----------------------光标移动--------------------------
#1,绝对移动:从文件开头位置算起
print(cursor.fetchall())
cursor.scroll(0,mode="absolute") #0是开头的位置,所以下次读取的内容和上次是一样的
print(cursor.fetchall())
cursor.scroll(1,mode="absolute") #1是第一个数据之后的位置(光标移动到第一个数据的尾部),下次读取从第二个开始
print(cursor.fetchall()) #2,相对移动
print(cursor.fetchone())
print(cursor.fetchone())
cursor.scroll(1,mode='relative') #相对于前面2个,把光标移动到下一个数据的尾部.(即前面数据数量+1的数据尾部的位置)
print(cursor.fetchone()) #3.关闭游标
cursor.close()
#4.关闭连接
conn.close()
六、获取插入的最后一条数据的自增ID
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='',
database='db7',charset='utf8')
cursor=conn.cursor() sql='insert into user(name,age,password) values(%s,%s,%s);'
rows=cursor.execute(sql,('alex1',20,''))
# rows=cursor.executemany(sql,[('yuanhao','123'),('laowu','123'),('kgf','12323')])
conn.commit()
print(cursor.lastrowid) #查看表中最后一行的iD cursor.close()
conn.close()
day 7-21 pymysql模块的更多相关文章
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- PyMySQL模块的使用
PyMySQL介绍 PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2系列中则使用mysqldb.Django中也可以使用PyMySQL连接MySQL数据库. ...
- Python连接MySQL数据库之pymysql模块使用
安装PyMySQL pip install pymysql PyMySQL介绍 PyMySQL是在python3.x版本中用于连接MySQL服务器的一个库,2中则使用mysqldb. Django中也 ...
- (转)Python中操作mysql的pymysql模块详解
原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...
- 第八章| 3. MyAQL数据库|Navicat工具与pymysql模块 | 内置功能 | 索引原理
1.Navicat工具与pymysql模块 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数 ...
- python3之pymysql模块
1.python3 MySQL数据库链接模块 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 Pyt ...
- Navicat工具、pymysql模块、数据备份
IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mys ...
- pymysql 模块
Python3连接MySQL 介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL ...
- pymysql模块使用---Python连接MySQL数据库
pymysql模块使用---Python连接MySQL数据库 浏览目录 pymysql介绍 连接数据库 execute( ) 之 sql 注入 增删改查操作 进阶用法 一.pymysql介绍 1.介绍 ...
随机推荐
- request.getParameter("name")乱码问题
1 页面提交http的get请求时,找到页面的字符编码<%@ page contentType="text/html;charset=utf-8" language=&quo ...
- bootstrap-table 分页
bootstrap-table <!DOCTYPE html> <head> <meta charset="UTF-8"/> <tit ...
- metamask的使用
Metamask 我是在火狐浏览器安装它的,所以一开始安装了Firefox:http://www.firefox.com.cn/ 然后是下载metamask,它的官方网站是https://metama ...
- day15--认识模块、导入模块、自执行与模块的区别
一.认识模块 什么是模块? 模块本质是一些功能的集合体 创建的一个py文件就是一个模块 使用模块: 在使用模块的py文件中 通过 import 或者 from import导入模块 模块的优点: 可 ...
- 如何使用Apollo标定激光雷达和IMU
https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_1_5_lidar_calibration_guide_ ...
- javaScript的原型模式
一.原型模式: 这个只存在于函数中. 我们在创建的每一个函数中都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以有特定类型 的所有实例共享的属性和方法 ...
- WebBench压力测试工具(详细源码注释+分析)
本文适合人群:对WebBench实现感兴趣的人 WebBench原理: Linux下使用的服务器压力测试工具,利用fork建立多个子进程,每个子进程在测试时间内不断发送请求报文,建立多个连接,然后由父 ...
- flex布局,最后一行左对齐
拥抱flex 网上查找资料解决办法都是操作数据,个人感觉css问题还是用css来解决(当然问题不同,解决方案不同,这里只是针对某个问题的解决方法,不能解决所有问题,大家视情况而定,如果还是不行欢迎沟通 ...
- IntentService解析
IntentService中内置了一个HandlerThread,能够对数据进行处理.相比于普通的Service,IntentService有以下优点: 1. 不用在Service创建线程. 2. 不 ...
- SQL Server-聚焦事务、隔离级别详解(二十九)
前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics. 事务简 ...