存儲(chǔ)過(guò)程是一個(gè)SQL語(yǔ)句集合,當(dāng)主動(dòng)去調(diào)用存儲(chǔ)過(guò)程時(shí),其中內(nèi)部的SQL語(yǔ)句會(huì)按照邏輯執(zhí)行。
存儲(chǔ)過(guò)程過(guò)接收的參數(shù)
參數(shù) | 描述 |
---|---|
in | 僅用于傳入?yún)?shù)用 |
out | 僅用于返回值用 |
inout | 既可以傳入又可以當(dāng)作返回值 |
創(chuàng)建存儲(chǔ)過(guò)程
創(chuàng)建一個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程
-- 修改SQL語(yǔ)句的結(jié)束符為% delimiter % -- 創(chuàng)建這個(gè)存儲(chǔ)過(guò)程先刪除 DROP PROCEDURE IF EXISTS proc_p1 % CREATE PROCEDURE proc_p1() -- 開(kāi)始 BEGIN -- SQL語(yǔ)句塊 select * from color; -- 結(jié)束 END % -- 把SQL語(yǔ)句的結(jié)束符改為; delimiter ;通過(guò)call
調(diào)用存儲(chǔ)過(guò)程
輸出為
+-----+--------+ | nid | title | +-----+--------+ | 1 | red | | 2 | yellow | +-----+--------+ 2 rows in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)刪除存儲(chǔ)過(guò)程
DROP PROCEDURE proc_p1;創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,接收一個(gè)參數(shù),傳入的參數(shù)就是顯示數(shù)據(jù)的個(gè)數(shù),
delimiter % DROP PROCEDURE IF EXISTS proc_p1 % create PROCEDURE proc_p1( -- i1就是傳入的參數(shù),傳入的數(shù)據(jù)類(lèi)型必須是int類(lèi)型 in i1 int ) BEGIN -- 定義兩個(gè)局部變量d1和d2,數(shù)據(jù)類(lèi)型都為int,d1默認(rèn)值為空,d2默認(rèn)值為1 DECLARE d1 int; DECLARE d2 int DEFAULT 1; -- d1的值等于傳入過(guò)來(lái)的i1加上定義的局部變量d2的值 SET d1 = i1 + d2; -- 查找person_info表中的nid大于d1的數(shù)據(jù) SELECT * FROM person_info WHERE nid > d1; END % delimiter ;查詢(xún),括號(hào)內(nèi)輸入定義的參數(shù)
CALL proc_p1(4);顯示結(jié)果
+-----+------+------------------+-------------+----------+----------+---------+-----------+ | 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ù)全部輸出出來(lái)了,傳入的值是4
,我們?cè)趦?nèi)部讓4+1
了,所以就是大于5
的數(shù)據(jù).
查看數(shù)據(jù)
set @o = 5; CALL proc_p1(1,@o,@u); SELECT @o,@u;顯示的結(jié)果
+------+------+ | @o | @u | +------+------+ | 6 | 103 | +------+------+ 1 row in set (0.00 sec)使用pymysql模塊操作存儲(chǔ)過(guò)程
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í)行存儲(chǔ)過(guò)程 row = cursor.callproc("proc_p2",(1,2,3)) # 存儲(chǔ)過(guò)程的查詢(xún)結(jié)果 selc = cursor.fetchall() print(selc) # 獲取存儲(chǔ)過(guò)程返回 effect_row = cursor.execute('select @_proc_p2_0, @_proc_p2_1, @_proc_p2_2') # 取存儲(chǔ)過(guò)程返回值 result = cursor.fetchone() print(result) conn.commit() cursor.close() conn.close()顯示的結(jié)果
C:\Python\Python35\python.exe D:/PycharmProjects/pymysql_存儲(chǔ)過(guò)程.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存儲(chǔ)過(guò)程使用into
into
其實(shí)就是把一個(gè)select
的執(zhí)行結(jié)果當(dāng)作另一個(gè)select
的參數(shù),例如下面的實(shí)例:
執(zhí)行
call proc_p2();結(jié)果
+-----+--------+ | nid | title | +-----+--------+ | 2 | yellow | +-----+--------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)#Python全棧之路
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前文章:6Python全棧之路系列之MySQL存儲(chǔ)過(guò)程-創(chuàng)新互聯(lián)
文章出自:http://bm7419.com/article26/cdshcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、品牌網(wǎng)站制作、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、域名注冊(cè)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容