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.介绍 ...
随机推荐
- 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
错误信息:只有 assignment.call.increment.decrement 和 new 对象表达式可用作语句: 分析:发生这种情况一般是在赋值时把“=”写成了“==”,例如:textBox ...
- vue的过滤器语发及应用案例
1.使用地方: 双花括号插值处或 组件属性处 例: {{ message | capitalize }} <div v-bind:id="rawId | formatId&quo ...
- Python:Day45 Javascript的String字符串
typeof只能判断普通数据类型, 对于复杂的只是判断出来是一个Object: instanceof 可以判断数据是否是某一类型: alert(s instanceof String); String ...
- Python 字典一个易犯的错误
一个易犯的错误,关于 Python 的传值(对于不可变量) 和 传引用(对于可变量),浅拷贝和深拷贝.废话不多说,看例子, 直接改变可变字典值,失败, >>> dic = dict. ...
- Python 在 Terminal 中的自动补全
为了在 Terminal 中使用 Python 更加方便,在 home 目录下添加脚本 .pythonstartup,内容如下, 然后在 .bashrc 中添加 export PYTHONSTARTU ...
- windows解决访问github慢问题
·1.更改host文件 文件地址: C:\Windows\System32\Drivers\etc 如果不能直接修改,可拷贝到桌面修改后再复制回去 2.在host文件追加 #github 19 ...
- 【出错记录】Tomcat非root用户启动无法拥有权限读写文件
简单记录下,如有必要,将深入补充: 一.非root用户运行Tomcat及原因 由于项目中,为了安全需要,Tomcat将禁止以root形式启动,原因很简单,举个例子,一旦有人恶意将jsp文件透过某个别的 ...
- OO博客作业3:第9-11周作业总结
一.总结介绍规格化设计的大致发展历史和为什么得到了人们的重视 1.规格化设计的大致发展历史 规格化设计,又称契约式设计,最早由Bertrand Meyer于1986年提出,出自于<面向对象软件构 ...
- python-BeautifulSoup库详解
快速使用 通过下面的一个例子,对bs4有个简单的了解,以及看一下它的强大之处: from bs4 import BeautifulSoup html = ''' <html><hea ...
- Python之random模块
random模块 产生随机数的模块 是Python的标准模块,直接导入即可 import random 1)随机取一个整数,使用.randint()方法: import random print(ra ...