6Python全棧之路系列之MySQL存儲過程-創(chuàng)新互聯(lián)

Python全棧之路系列之MySQL存儲過程


創(chuàng)新互聯(lián)建站公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站設計、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元新?lián)嶙鼍W(wǎng)站,已為上家服務,為新?lián)岣鞯仄髽I(yè)和個人服務,聯(lián)系電話:13518219792

存儲過程是一個SQL語句集合,當主動去調用存儲過程時,其中內部的SQL語句會按照邏輯執(zhí)行。

存儲過程過接收的參數(shù)

參數(shù)描述
in僅用于傳入?yún)?shù)用
out僅用于返回值用
inout既可以傳入又可以當作返回值

創(chuàng)建存儲過程

創(chuàng)建一個簡單的存儲過程

-- 修改SQL語句的結束符為% delimiter % -- 創(chuàng)建這個存儲過程先刪除 DROP PROCEDURE IF EXISTS proc_p1 % CREATE PROCEDURE proc_p1() -- 開始 BEGIN     -- SQL語句塊     select * from color; -- 結束 END % -- 把SQL語句的結束符改為; delimiter ;

通過call調用存儲過程

call proc_p1();

輸出為

+-----+--------+ | nid | title  | +-----+--------+ |   1 | red    | |   2 | yellow | +-----+--------+ 2 rows in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)

刪除存儲過程

DROP PROCEDURE proc_p1;

實例

創(chuàng)建一個存儲過程,接收一個參數(shù),傳入的參數(shù)就是顯示數(shù)據(jù)的個數(shù),

delimiter % DROP PROCEDURE IF EXISTS proc_p1 % create PROCEDURE proc_p1(     -- i1就是傳入的參數(shù),傳入的數(shù)據(jù)類型必須是int類型     in i1 int ) BEGIN     -- 定義兩個局部變量d1和d2,數(shù)據(jù)類型都為int,d1默認值為空,d2默認值為1     DECLARE d1 int;     DECLARE d2 int DEFAULT 1;     -- d1的值等于傳入過來的i1加上定義的局部變量d2的值     SET d1 = i1 + d2;     -- 查找person_info表中的nid大于d1的數(shù)據(jù)     SELECT * FROM person_info WHERE nid > d1; END % delimiter ;

查詢,括號內輸入定義的參數(shù)

CALL proc_p1(4);

顯示結果

+-----+------+------------------+-------------+----------+----------+---------+-----------+ | nid | name | email            | phone       | part_nid | position | caption | color_nid | +-----+------+------------------+-------------+----------+----------+---------+-----------+ |   6 | w    | as@anshengme.com | 13800138000 |        5 | Python   | NULL    |      NULL | |   9 | aa   | a@ansheng.me     | 13800138000 |        3 | DBA      | NULL    |         2 | |  10 | b    | b.ansheng.me     | 13800138000 |        3 | DBA      | NULL    |         1 | +-----+------+------------------+-------------+----------+----------+---------+-----------+ 3 rows in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)

這次把nid大于5的數(shù)據(jù)全部輸出出來了,傳入的值是4,我們在內部讓4+1了,所以就是大于5的數(shù)據(jù).

delimiter % DROP PROCEDURE IF EXISTS proc_p1 % create PROCEDURE proc_p1(     -- 接收了三個參數(shù),類型都是int     in i1 int,     inout ii int,     out i2 int ) BEGIN     -- 定義一個局部變量d2,默認值是3,數(shù)據(jù)類型為int     DECLARE d2 int DEFAULT 3;     -- ii = ii + 1     set ii = ii + 1;     -- 如果傳入的i1等于1     IF i1 = 1 THEN         -- i2 = 100 + d2         set i2 = 100 + d2;     -- 如果傳入的i1等于2     ELSEIF i1 = 2 THEN         -- i2 = 200 + d2         set i2 = 200 + d2;     -- 否則     ELSE         -- i2 = 1000 + d2         set i2 = 1000 + d2;     END IF; END % delimiter ;

查看數(shù)據(jù)

set @o = 5; CALL proc_p1(1,@o,@u); SELECT @o,@u;

顯示的結果

+------+------+ | @o   | @u   | +------+------+ |    6 |  103 | +------+------+ 1 row in set (0.00 sec)

使用pymysql模塊操作存儲過程

Python代碼為:

import pymysql conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='as', db="dbname") cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 執(zhí)行存儲過程 row = cursor.callproc("proc_p2",(1,2,3)) # 存儲過程的查詢結果 selc = cursor.fetchall() print(selc) # 獲取存儲過程返回 effect_row = cursor.execute('select @_proc_p2_0, @_proc_p2_1, @_proc_p2_2') # 取存儲過程返回值 result = cursor.fetchone() print(result) conn.commit() cursor.close() conn.close()

顯示的結果

C:\Python\Python35\python.exe D:/PycharmProjects/pymysql_存儲過程.py [{'nid': 1, 'name': 'man1'}, {'nid': 2, 'name': 'man2'}, {'nid': 3, 'name': 'man3'}] {'@_proc_p2_1': 3, '@_proc_p2_0': 1, '@_proc_p2_2': 103} Process finished with exit code 0

存儲過程使用into

into其實就是把一個select的執(zhí)行結果當作另一個select的參數(shù),例如下面的實例:

delimiter % DROP PROCEDURE IF EXISTS proc_p2 % CREATE PROCEDURE proc_p2() BEGIN     -- 定義一個局部變量n,類型為int     DECLARE n int;     -- 獲取color_nid = 2的數(shù)據(jù)并賦值給n     SELECT color_nid into n FROM person_info where color_nid = 2;     -- 輸出nid = n的數(shù)據(jù)     SELECT * from color WHERE nid = n; END % delimiter ;

執(zhí)行

call proc_p2();

結果

+-----+--------+ | nid | title  | +-----+--------+ |   2 | yellow | +-----+--------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)

#Python全棧之路

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前文章:6Python全棧之路系列之MySQL存儲過程-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article26/cdshcg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、品牌網(wǎng)站制作、營銷型網(wǎng)站建設、品牌網(wǎng)站建設、域名注冊、App設計

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司