Python--day46--mysql存儲過程(不經常使用)(包含防sql注入)

1、存儲過程:

優勢:只要傳不多的數據到數據庫就能夠了   缺點:dba管理數據庫的時候可能會對數據庫進行了更改了那一坨sql語句。python

2、建立存儲過程:

一、簡單

建立存儲過程:mysql

Python中使用結果集:sql

 1 #
 2 import pymysql  3 
 4 #
 5 conn = pymysql.connect(host="localhost",user='root',password='123456',database="db5",charset='utf8')  6 #遊標
 7 cursor = conn.cursor()  8 #鏈接數據庫成功
 9  10 #執行存儲過程 11 cursor.callproc('p1') 12 conn.commit() 13 
14 
15 #獲取結果集
16 result = cursor.fetchall() 17 print(result) 18 
19 
20 #關閉數據庫
21 cursor.close() 22 conn.close()

2,傳參數:(in,out,inout三個關鍵字)

建立存儲過程:數據庫

直接在mysql數據庫中調用並傳參:

python中調用並傳參:

 1 import pymysql  2 
 3 #
 4 conn = pymysql.connect(host="localhost",user='root',password='123456',database="db5",charset='utf8')  5 #遊標
 6 cursor = conn.cursor()  7 #鏈接數據庫成功
 8 
 9 #執行存儲過程
10 cursor.callproc('p2',(12,2)) 11 conn.commit() 12 
13 
14 #獲取結果集
15 result = cursor.fetchall() 16 print(result) 17 
18 
19 #關閉數據庫
20 cursor.close() 21 conn.close()

運行結果:fetch

三、參數 out

python中的參數out:

 1 import pymysql  2 
 3 #
 4 conn = pymysql.connect(host="localhost",user='root',password='123456',database="db5",charset='utf8')  5 #遊標
 6 cursor = conn.cursor()  7 #鏈接數據庫成功
 8 
 9 #執行存儲過程
10 cursor.callproc('p3',(12,2)) 11 #獲取結果集
12 r1 = cursor.fetchall() 13 print(r1) 14 
15 
16 #拿存儲過程out回來的結果集 17 #@_p3_0表示查詢p3的第個參數,@_p3_1表示第二個參數 18 cursor.execute('select @_p3_0,@_p3_1') 19 #獲取結果集 20 r2 = cursor.fetchall() 21 print(r2)
22 23 24 #關閉數據庫 25 cursor.close() 26 conn.close()

4,參數inout:inout即能往裏面傳值也能往外面傳值

好比 out n2 int;set @v1=10;給n2傳了一個值10,假設有print的時候(沒有print),當print (n2)的時候是沒有值的,而intout n2 int的時候print (n2)是有值的。spa

5,事務(其中一個出錯就回滾到原來的狀態)

例1:

6,遊標(不經常使用,銀行中的數據要進行分門別類進行計算的時候纔要用到遊標,能不用遊標就不用遊標)

7,動態執行sql(防sql注入)

3、總結:

爲何有結果集又有out僞造的返回值?

相關文章
相關標籤/搜索