python3引數化列表防止SQL注入

2021-09-10 07:02:14 字數 2916 閱讀 1470

產生原因: 後台將使用者提交的帶有惡意的資料和sql進行字串方式的拼接,從而影響了sql語句的語義,最終產生資料洩露的現象。 如果防止: sql語句的引數化, 將sql語句的所有資料引數存在乙個列表中傳遞給execute函式的第二個引數

注意

from pymysql import connect

classjd(

object):

def__init__

(self)

:# 建立和資料庫伺服器的連線 伺服器位址、埠、戶名、密碼、資料庫名、通訊使用字元和資料庫字符集一致

conn = connect(host=

'localhost'

, port=

3306

, user=

'root'

, password=

'mysql'

, database=

'jing_dong'

, charset=

'utf8'

)# 獲取游標

self.cursor = conn.cursor(

)def

__del__

(self)

: self.cursor.close(

) self.conn.close(

)def

excute_sql

(self,sql)

: self.cursor.execute(sql)

for temp in self.cursor.fetchall():

print

(temp)

# # 非安全的方式

# # 輸入 " or 1=1 or " (雙引號也要輸入)

# sql = 'select * from goods where name="%s"' % find_name

# print("""sql===>%s<====""" % sql)

# # 執行select語句,並返回受影響的行數:查詢所有資料

# count = cs1.execute(sql)

# 安全的方式

# 構造引數列表

# 執行select語句,並返回受影響的行數:查詢所有資料

# args = "goods"

# sql = "select * from %s;"%(args,)

# 注意:

# 如果要是有多個引數,需要進行引數化

# 那麼params = [數值1, 數值2....],此時sql語句中有多個%s即可

defshow_all_items

(self)

: args =

"goods"

sql =

"select * from %s;"

%(args,

) self.excute_sql(sql)

defshow_cates

(self)

: args =

"goods"

sql =

"select cate_name from %s;"

%(args,

) self.excute_sql(sql)

defshow_price

(self)

: args =

"goods"

sql =

"select price from %s;"

%(args,

) self.excute_sql(sql)

defprint_menu

(self)

:print

("-----京東-----"

)print

("1:查詢所有的商品的資訊"

)print

("2.查詢所有商品的分類資訊"

)print

("3.查詢所有商品的**"

)print

("4.新增商品種類"

)print

("5.根據id查詢商品資訊"

)print

("6.根據id查詢商品資訊保安方式"

)return

input

("請輸入功能對應的序號:"

)def

run(self)

:# 迴圈乙個查詢選單

while

true

: num = self.print_menu(

)if num ==

"1":

# 查詢所有的商品的資訊

self.show_all_items(

)elif num ==

"2":

# 查詢所有商品的分類資訊

self.show_cates(

)elif num ==

"3":

# 查詢所有商品的**

self.show_price(

)if num ==

"4":

# 新增商品種類

pass

elif num ==

"5":

# 根據id查詢商品資訊

pass

elif num ==

"6":

# 根據id查詢商品資訊保安方式

pass

else

:print

("輸入有誤,請重新輸入。。。"

)def

main()

:# 建立乙個京東**的物件

jd = jd(

)# 呼叫這個物件的run方法,讓其執行

jd.run(

)if __name__ ==

'__main__'

: main(

)

python3 函式引數

python函式引數包括五種型別 位置引數 預設引數 可變引數 關鍵字引數以及命名關鍵字引數。位置引數例如 def ex y y就是位置引數 例子 def ex y print y ex 2 預設引數 可以簡化函式的呼叫,設定預設引數時,要注意 一 必選引數在前,預設引數在後 二當函式有多個引數時,...

python3學習 列表方法

列表是python中最基本的資料結構,列表是最常用的python資料型別,列表的資料項不需要具有相同的型別。列表中的每個元素都分配乙個數字 它的位置,或索引,第乙個索引是0,第二個索引是1,依此類推。一 建立乙個列表 li 二 訪問列表中的值 li 下標 或 例如 li 1 4 擷取 四 刪除列表元...

python3學習筆記 列表

列表 陣列 定義列表 list 向列表增加元素a print list a b c d 插入元素 list.insert 0,aa 在第1個元素前插入乙個元素 print list aa a b c d 獲取元素 list n 修改元素 list 0 m 直接向元素賦值 print list m a...