mysql學習【第14篇】:pymysql pymysql模組
阿新 • • 發佈:2018-12-19
pymysql模組
一、安裝的兩種方法
第一種
#安裝 pip3 install pymysql
第二種
二、連結,執行sql,關閉(遊標)
import pymysql
user= input('使用者名稱:>>').strip()
pwd= input('密碼:>>').strip()
#先連結,拿到遊標
conn=pymysql.connect(host='localhost',user='root',password='123456',
database='day47',charset='utf8')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql
sql='select * from user where user="%s" and password="%s";'%(user,pwd)
print(sql) #注意%s需要加雙引號 rows = cursor.execute(sql) #拿到受影響的行數 cursor.close() 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='egon';則--之後的條件被註釋掉了 #1、sql注入之:使用者存在,繞過密碼 egon' -- 任意字元 #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的規矩來。
四、增、刪、改:conn.commit()
增:
import pymysql
先連結,拿到遊標
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 增:
sql='insert into user1(user,password) VALUES (%s,%s)'
print(sql)
# rows = cursor.execute(sql,('xixi',123)) #插入一條記錄
rows = cursor.executemany(sql,[('xixi',123),('aaa',456),('ttt',147)]) #插入多行記錄
print('%s row in set (0.00 sec)'%rows)
conn.commit() #提交到資料庫
cursor.close()
conn.close()
刪:
import pymysql
#先連結,拿到遊標
name=input('>>').strip()
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 刪:
sql='delete from user1 where user =%s;' #刪除資料
print(sql)
rows = cursor.execute(sql,(name))
print('%s row in set (0.00 sec)'%rows) conn.commit() #提交到資料庫 cursor.close() conn.close()
改:
import pymysql
#先連結,拿到遊標
id=input('>>').strip()
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 改:
sql=' update user1 set password = "5555555" where id=%s;'
print(sql)
rows = cursor.execute(sql,(id))
print('%s row in set (0.00 sec)'%rows) conn.commit() #提交到資料庫 cursor.close() conn.close()
五、查:fetchone,fetchmany,fetchall
---------查fetchone,fetchmany,fetchall-----------
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 查:
sql='select * from user1;'
rows = cursor.execute(sql)
#查單條fetchone
res1=cursor.fetchone()
res2=cursor.fetchone() res3=cursor.fetchone() print(res1) print(res2) print(res3) print(res3[0]) #查多條fetchmany print(cursor.fetchmany(3)) print(cursor.fetchone()) #查所有fetchall print(cursor.fetchall()) print(cursor.fetchone()) #-------游標的移動-------- #1.絕對路徑:從檔案的開頭位置算起 print(cursor.fetchall()) cursor.scroll(1,mode='absolute') print(cursor.fetchone()) cursor.scroll(3,mode='absolute') print(cursor.fetchone()) #2.相對路徑: print(cursor.fetchone()) print(cursor.fetchone()) cursor.scroll(2,mode='relative') #相對於上面的兩條向後移兩條 print(cursor.fetchone()) print('%s row in set (0.00 sec)' %rows) cursor.close() conn.close()
六、獲取插入的最後一條資料的自增ID
------查看錶中最後一行的iD
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='123456',
database='day47',charset='utf8')
cursor=conn.cursor()
sql='insert into user1(user,password) values(%s,%s);'
rows=cursor.execute(sql,('alex','123')) # rows=cursor.executemany(sql,[('yuanhao','123'),('laowu','123'),('kgf','12323')]) conn.commit() print(cursor.lastrowid) #查看錶中最後一行的iD cursor.close() conn.close()
一、安裝的兩種方法
第一種
#安裝 pip3 install pymysql
第二種
二、連結,執行sql,關閉(遊標)
import pymysql
user= input('使用者名稱:>>').strip()
pwd= input('密碼:>>').strip()
#先連結,拿到遊標
conn=pymysql.connect(host='localhost',user='root',password='123456',
database='day47',charset='utf8')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql
sql='select * from user where user="%s" and password="%s";'%(user,pwd)
print(sql) #注意%s需要加雙引號 rows = cursor.execute(sql) #拿到受影響的行數 cursor.close() 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='egon';則--之後的條件被註釋掉了 #1、sql注入之:使用者存在,繞過密碼 egon' -- 任意字元 #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的規矩來。
四、增、刪、改:conn.commit()
增:
import pymysql
先連結,拿到遊標
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 增:
sql='insert into user1(user,password) VALUES (%s,%s)'
print(sql)
# rows = cursor.execute(sql,('xixi',123)) #插入一條記錄
rows = cursor.executemany(sql,[('xixi',123),('aaa',456),('ttt',147)]) #插入多行記錄
print('%s row in set (0.00 sec)'%rows)
conn.commit() #提交到資料庫
cursor.close()
conn.close()
刪:
import pymysql
#先連結,拿到遊標
name=input('>>').strip()
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 刪:
sql='delete from user1 where user =%s;' #刪除資料
print(sql)
rows = cursor.execute(sql,(name))
print('%s row in set (0.00 sec)'%rows) conn.commit() #提交到資料庫 cursor.close() conn.close()
改:
import pymysql
#先連結,拿到遊標
id=input('>>').strip()
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 改:
sql=' update user1 set password = "5555555" where id=%s;'
print(sql)
rows = cursor.execute(sql,(id))
print('%s row in set (0.00 sec)'%rows) conn.commit() #提交到資料庫 cursor.close() conn.close()
五、查:fetchone,fetchmany,fetchall
---------查fetchone,fetchmany,fetchall-----------
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
cursor=conn.cursor() #拿到遊標,即mysql >
#執行sql 查:
sql='select * from user1;'
rows = cursor.execute(sql)
#查單條fetchone
res1=cursor.fetchone()
res2=cursor.fetchone() res3=cursor.fetchone() print(res1) print(res2) print(res3) print(res3[0]) #查多條fetchmany print(cursor.fetchmany(3)) print(cursor.fetchone()) #查所有fetchall print(cursor.fetchall()) print(cursor.fetchone()) #-------游標的移動-------- #1.絕對路徑:從檔案的開頭位置算起 print(cursor.fetchall()) cursor.scroll(1,mode='absolute') print(cursor.fetchone()) cursor.scroll(3,mode='absolute') print(cursor.fetchone()) #2.相對路徑: print(cursor.fetchone()) print(cursor.fetchone()) cursor.scroll(2,mode='relative') #相對於上面的兩條向後移兩條 print(cursor.fetchone()) print('%s row in set (0.00 sec)' %rows) cursor.close() conn.close()
六、獲取插入的最後一條資料的自增ID
------查看錶中最後一行的iD
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='123456',
database='day47',charset='utf8')
cursor=conn.cursor()
sql='insert into user1(user,password) values(%s,%s);'
rows=cursor.execute(sql,('alex','123')) # rows=cursor.executemany(sql,[('yuanhao','123'),('laowu','123'),('kgf','12323')]) conn.commit() print(cursor.lastrowid) #查看錶中最後一行的iD cursor.close() conn.close()