存儲過程是一個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
調用存儲過程
輸出為
+-----+--------+ | 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ù).
查看數(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ù),例如下面的實例:
執(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)
猜你還喜歡下面的內容