pymysql實現MySQL與Python交互


常見MySQL操作

所需模塊:

1 pip3  install pymysql

查詢(fetchone,fetchmany,fetchall):

  1.fetchone

 1 import pymysql
 2 
 3 con = pymysql.connect(host="localhost", user="root", password="admin", database="pysql", charset="utf8")
 4 cursor = con.cursor()
 5 try:
 6     # 當id設置為主鍵,但是沒有設置為自增時,則必須給id字段賦值,否則會報錯。
 7     sql = "select * from userinfo;"
 8     cursor.execute(sql)
 9     # 單使用一個fetchone會獲取索引為0的記錄,若使用多個fetchone時,會按照前一個的索引值繼續向下獲取記錄
10     data1 = cursor.fetchone()
11     data2 = cursor.fetchone()
12     data3 = cursor.fetchone()
13 except Exception as e:
14     print("error")
15 cursor.close()
16 con.close()
17 print(data1)
18 print(data2)
19 print(data3)

  2.fetchmany

 1 import pymysql
 2 
 3 con = pymysql.connect(host="localhost", user="root", password="admin", database="pysql", charset="utf8")
 4 cursor = con.cursor()
 5 try:
 6     # 當id設置為主鍵,但是沒有設置為自增時,則必須給id字段賦值,否則會報錯。
 7     sql = "select * from userinfo;"
 8     cursor.execute(sql)
 9     # 和fetchone相同:單個從0開始獲取查詢,多個從上一個的索引之后進行查詢
10     data1 = cursor.fetchmany(3)
11     data2 = cursor.fetchmany(5)
12 except Exception as e:
13     print("error")
14 cursor.close()
15 con.close()
16 print(data1)
17 print(data2)

  3.fetchall

 1 import pymysql
 2 
 3 con = pymysql.connect(host="localhost", user="root", password="admin", database="pysql", charset="utf8")
 4 cursor = con.cursor()
 5 try:
 6     # 當id設置為主鍵,但是沒有設置為自增時,則必須給id字段賦值,否則會報錯。
 7     sql = "select * from userinfo;"
 8     cursor.execute(sql)
 9     # 單使用一個fetchmany會獲取所有記錄,若使用多個fetchone時,其余的fetchall()結果為空
10     data1 = cursor.fetchall()
11     data2 = cursor.fetchall()
12 except Exception as e:
13     print("error")
14 cursor.close()
15 con.close()
16 print(data1)
17 print(data2)

 

 

插入、更新、修改(最后需要提交)

 1 import pymysql
 2 conn=pymysql.connect(host='localhost',user='root',password='admin',database='db1')
 3 cursor=conn.cursor()
 4 sql='insert into user(name,password) values("xxx","123");'
 5 rows=cursor.execute(sql)
 6 print(cursor.lastrowid) #在插入語句后查看最新一條記錄id
 7 # pymysql.connect 類默認開啟了事務,因此對表進行修改、更新、刪除、插入操作時需要提交事務才可以生效
 8 conn.commit()
 9 cursor.close()
10 conn.close()

SQL注入

名詞解釋:

  SQL注入是對Python與MySQL進行動態數據校驗時,用戶故意輸入非法字段,從而繞過數據校驗的行為。

 1 import pymysql
 2 user=input('用戶名: ').strip()
 3 pwd=input('密碼: ').strip()
 4 
 5 #鏈接
 6 conn=pymysql.connect(host='localhost',user='root',password='admin',database='db1',charset='utf8')
 7 #游標
 8 cursor=conn.cursor() #執行完畢返回的結果集默認以元組顯示
 9 #執行sql語句
10 sql='select * from user where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引號
11 print(sql)
12 res=cursor.execute(sql) #執行sql語句,返回sql查詢成功的記錄數目
13 cursor.close()
14 conn.close()
15 
16 if res:
17     print('登錄成功')
18 else:
19     print('登錄失敗')

正常情況下的輸入過程:

故意繞過驗證的非法輸入

  當知道用戶名時:

雖然知道密碼,但輸入的密碼不匹配卻成功登陸。

  用戶名和密碼都不知道時:

雖然不知道用戶名和密碼,卻成功登陸。

  SQL注入的中心思想就是人為的輸入SQL語句中的特殊字符串,繞過驗證。"--"在MySQL中為注釋字符,通過此方法可以屏蔽部分代碼,從而繞過驗證。

  解決辦法:

  使用MySQL的內置方法校驗輸入字符串的合法性,提高安全性。

 1 import pymysql
 2 user=input('用戶名: ').strip()
 3 pwd=input('密碼: ').strip()
 4 
 5 #鏈接
 6 conn=pymysql.connect(host='localhost',user='root',password='admin',database='db1',charset='utf8')
 7 #游標
 8 cursor=conn.cursor() #執行完畢返回的結果集默認以元組顯示
 9 #執行sql語句
10 sql='select * from user where name=%s and password=%s'#注意%s沒有加引號
11 print(sql)
12 res=cursor.execute(sql,[user,pwd]) #執行sql語句,返回sql查詢成功的記錄數目
13 cursor.close()
14 conn.close()
15 if res:
16     print('登錄成功')
17 else:
18     print('登錄失敗')

  校驗驗證:

  成功解決SQL注入問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM