1. 程式人生 > >Mysql學習---使用Python執行存儲過程

Mysql學習---使用Python執行存儲過程

cnblogs let als lock char 技術 width rgs 多個

使用Python執行存儲過程

使用Python執行存儲過程[2部分]:

1.執行存儲過程,獲取存儲過程的結果集
2.將返回值設置給了 @_存儲過程名_序號 =

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 執行存儲過程
# @_p3_0 = 1, 相當於Python幫我們創建了變量,所以返回值也是放在了這個變量裏面,需要我們手動獲取
# @_p3_1 = 2
# @_p3_2 = 3
# @_p3_3 = 0
ret1 = cursor.callproc(‘p3‘, args=(1, 2, 3, 0))
# print(‘ret1:‘, ret1)   # 傳遞參數過去 ret1: (1, 2, 3, 0),同時執行了存儲過程將結果放在內存
result = cursor.fetchall()  # 從內存獲取返回值,[{‘@_p3_0‘: 1, ‘@_p3_3‘: 7, ‘@_p3_1‘: 2, ‘@_p3_2‘: 103}]
print(‘返回的參數:‘, result, ‘\n‘)

# 獲取執行完存儲的參數,因為Python幫我們將結果放在了變量裏,所以需要從變量裏面獲取
ret2 = cursor.execute("select @_p3_0,@_p3_1,@_p3_2,@_p3_3")
# print(‘ret2:‘, ret2)       # 什麽都不執行: ret2: 1
result2 = cursor.fetchall()      # 獲取返回值,[{‘@_p3_0‘: 1, ‘@_p3_3‘: 7, ‘@_p3_1‘: 2, ‘@_p3_2‘: 103}]
print(‘返回的結果集:‘, result2)

conn.commit()   # 因為存儲過程裏面有多個sql語句,可能有selete,insert等語句,所以為了保證代碼的完整
cursor.close()
conn.close()

技術分享圖片

技術分享圖片

Mysql學習---使用Python執行存儲過程