pip3 install pymysql```
##一 鏈接遣臼、執(zhí)行sql美侦、關(guān)閉(游標(biāo))

import pymysql
user=input('用戶名: ').strip()
pwd=input('密碼: ').strip()
鏈接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon',charset='utf8')
游標(biāo)
cursor=conn.cursor() #執(zhí)行?完畢返回的結(jié)果集默認(rèn)以元組顯示
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
執(zhí)行sql語句
sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引號
print(sql)
res=cursor.execute(sql) #執(zhí)行sql語句钱磅,返回sql查詢成功的記錄數(shù)目
print(res)
cursor.close()
conn.close()
if res:
print('登錄成功')
else:
print('登錄失敗')
##二 execute()之sql注入
注意:符號--會注釋掉它之后的sql踢匣,正確的語法:--后至少有一個任意字符
根本原理:就根據(jù)程序的字符串拼接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 -- 任意字符


http://images2017.cnblogs.com/blog/1036857/201709/1036857-20170914073927438-1525371660.png
解決方法:
原來是我們對sql進(jìn)行字符串拼接
sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
print(sql)
res=cursor.execute(sql)
改寫為(execute幫我們做字符串拼接,我們無需且一定不能再為%s加引號了)
sql="select * from userinfo where name=%s and password=%s" #J5执!注意%s需要去掉引號忘嫉,因為pymysql會自動為我們加上
res=cursor.execute(sql,[user,pwd]) #pymysql模塊自動幫我們解決sql注入的問題荤牍,只要我們按照pymysql的規(guī)矩來。
##三 增庆冕、刪康吵、改:conn.commit()
import pymysql
鏈接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
游標(biāo)
cursor=conn.cursor()
執(zhí)行sql語句
part1
sql='insert into userinfo(name,password) values("root","123456");'
res=cursor.execute(sql) #執(zhí)行sql語句,返回sql影響成功的行數(shù)
print(res)
part2
sql='insert into userinfo(name,password) values(%s,%s);'
res=cursor.execute(sql,("root","123456")) #執(zhí)行sql語句访递,返回sql影響成功的行數(shù)
print(res)
part3
sql='insert into userinfo(name,password) values(%s,%s);'
res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #執(zhí)行sql語句晦嵌,返回sql影響成功的行數(shù)
print(res)
conn.commit() #提交后才發(fā)現(xiàn)表中插入記錄成功
cursor.close()
conn.close()
##四 查:fetchone,fetchmany拷姿,fetchall

import pymysql
鏈接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
游標(biāo)
cursor=conn.cursor()
執(zhí)行sql語句
sql='select * from userinfo;'
rows=cursor.execute(sql) #執(zhí)行sql語句惭载,返回sql影響成功的行數(shù)rows,將結(jié)果放入一個集合,等待被查詢
cursor.scroll(3,mode='absolute') # 相對絕對位置移動
cursor.scroll(3,mode='relative') # 相對當(dāng)前位置移動
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2)
res5=cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print('%s rows in set (0.00 sec)' %rows)
conn.commit() #提交后才發(fā)現(xiàn)表中插入記錄成功
cursor.close()
conn.close()
'''
(1, 'root', '123456')
(2, 'root', '123456')
(3, 'root', '123456')
((4, 'root', '123456'), (5, 'root', '123456'))
((6, 'root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))
rows in set (0.00 sec)
'''
##五 獲取插入的最后一條數(shù)據(jù)的自增ID
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
cursor=conn.cursor()
sql='insert into userinfo(name,password) values("xxx","123");'
rows=cursor.execute(sql)
print(cursor.lastrowid) #在插入語句后查看
conn.commit()
cursor.close()
conn.close()