数据库操作——pymysql模块
一
import pymysql conn=pymysql.connect( host='localhost', port=3306, user='zuo', password='123', database='day46', charset='utf8', ) name=input('name:') pwd=input('pwd:') # cur=conn.cursor() #获取游标 执行完毕返回的结果集默认以元组显示 cur=conn.cursor(cursor=pymysql.cursors.DictCursor) #设置执行完完毕返回的结果以字典显示 print('cur',cur) sql='select * from employee WHERE name=%s AND pwd=%s;' row=cur.execute(sql,(name,pwd)) #row是获取结果的行数 print('row',row) print(cur.fetchone()) #获取记录 if row: print('登录成功') else: print('登录失败')
输出:
name:egon pwd:123 cur <pymysql.cursors.DictCursor object at 0x0000011ADBC30F28> row 1 {'id': 2, 'name': 'egon', 'pwd': '123'} 登录成功
示例二
import pymysql conn=pymysql.connect( host='localhost', port=3306, user='zuo', password='123', database='day46', charset='utf8', ) cur=conn.cursor(cursor=pymysql.cursors.DictCursor) #设置执行完完毕返回的结果以字典显示 sql='select * from employee;' row=cur.execute(sql) cur.scroll(1,mode='absolute')#绝对移动 cur.scroll(1,mode='relative')#相对移动 print(cur.fetchone()) #fetchone() fetchmany(4) fetchall()
输出:
{'id': 2, 'name': 'egon', 'pwd': '123'}
示例三
import pymysql conn=pymysql.connect( host='localhost', port=3306, user='zuo', password='123', database='day46', charset='utf8', ) cur=conn.cursor(cursor=pymysql.cursors.DictCursor) #设置执行完完毕返回的结果以字典显示 sql='insert into employee(name,pwd) VALUES ("yuanhao","123"),("wenzhou","123"),("alex","123"),("egon","123");' row=cur.execute(sql) conn.commit() #commit Commit changes to stable storage生效保存到硬盘中 print(cur.lastrowid)
二 sql注入
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行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 -- 任意字符