# 實現:使用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() #關閉鏈接