# 实现:使用Python实现用户登陆,若是用户存在则登陆成功(假设该用户已在数据库中) import pymysql user = input('请输入用户名:') pwd = input('请输入密码:') # 1.链接 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8') # 2.建立游标 cursor = conn.cursor() #注意%s须要加引号 sql = "select * from userinfo where username='%s' and pwd='%s'" %(user, pwd) print(sql) # 3.执行sql语句 cursor.execute(sql) result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目 print(result) # 关闭链接,游标和链接都要关闭 cursor.close() conn.close() if result: print('登录成功') else: print('登陆失败')
最后那一个空格,在一条sql语句中若是遇到select * from userinfo where username='app01' -- asadasdas' and pwd='' 则--以后的条件被注释掉了(注意--后面还有一个空格) #一、sql注入之:用户存在,绕过密码 app01' -- 任意字符 #二、sql注入之:用户不存在,绕过用户与密码 xxx' or 1=1 -- 任意字符 #解决 # 原来是咱们对sql进行字符串拼接 # sql="select * from userinfo where name='%s' and password='%s'" %(username,pwd) # print(sql) # result=cursor.execute(sql) #改写为(execute帮咱们作字符串拼接,咱们无需且必定不能再为%s加引号了) sql="select * from userinfo where name=%s and password=%s" #!!!注意%s须要去掉引号,由于pymysql会自动为咱们加上 result=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮咱们解决sql注入的问题,只要咱们按照pymysql的规矩来。
import pymysql # use = input('请输入用户名:') # pwd = input('请输入密码:') conn = pymysql.connect( host='localhost', user='root', password="123", database='db8', port=3306, charset='utf8') cursor = conn.cursor() # sql = 'select * from userinfo where name = %(username)s and pwd = %(pwd)s ;' # sql = 'insert into userinfo(name,pwd) values(%s,%s)' # sql = 'update userinfo set name = %s where id=6' sql = 'truncate table userinfo' print(sql) #增 '''插入一条数据用 execute''' # res = cursor.execute(sql,[use,pwd]) '''插入多条数据使用executmany''' # res = cursor.executemany(sql,[('李四','88888888'),('王五','666666')]) #改 # res = cursor.execute(sql,[use]) #删 res = cursor.execute(sql) print(res) '''注意这里-增--删--改- 操做的时候必定要加commit否则是写不进数据库的''' conn.commit() cursor.close() conn.close()
游标移动位置:scroll(int,mode='relative')
relative 相对于本身进行移动
absolute 相对于左上角原点进行移动python
import pymysql conn = pymysql.connect( host='localhost', user='root', password="123", database='db8', port=3306, charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 本来返回的数据是一个大元组里有多个小元组,这里设置了就变成了一个列表里有多个字典 #查 sql = 'select * from userinfo' cursor.execute(sql) # 执行命令 # row= cursor.fetchone() #返回的结果 获取下一行数据,以第一行为为首行 # print(row) # row= cursor.fetchone() # print(row) # row = cursor.fetchall() #获取所有数据 row = cursor.fetchmany(8) # 获取多条数据,默认为0只获取第一条数据,加了数值就是获取几条数据,若是值比数据的条数大就获取所有 #-1不获取最后一条数据 #-2不获取最后两条数据 '''游标移动位置''' cursor.scroll(2,mode='absolute') # 以左上角的原点为参照物进行移动,0为第一行的开始位置 row = cursor.fetchone() print(row) cursor.scroll(-1,mode='relative') #向对于自己进行移动,负值为向上,正值为向下 row = cursor.fetchone() print(row) cursor.close() #关闭游标 conn.close() #关闭链接