Python 執行 mysql 存儲過程


mysql 創建簡單的臨時表 tmp

create database test;
use test;

DROP TABLE IF EXISTS `tmp`;
CREATE TABLE `tmp`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

INSERT INTO `tmp` VALUES (1, 'klvchen');
INSERT INTO `tmp` VALUES (2, 'lily');
INSERT INTO `tmp` VALUES (3, 'lucy');
INSERT INTO `tmp` VALUES (4, 'james');
INSERT INTO `tmp` VALUES (5, 'jim');

mysql 創建存儲過程

delimiter $$        # 自定義 mysql 的分隔符
CREATE  PROCEDURE p1(
    in i1 int,      # 僅用於傳入參數用
    in i2 int,
    inout i3 int,   # 既可以傳入又可以當作返回值
    out r1 int      # 僅用於返回值用,外部傳進來的值無用
)
BEGIN
    DECLARE temp1 int;
    DECLARE temp2 int default 0;
    
    set temp1 = 1;

    set r1 = i1 + i2 + temp1 + temp2;
    
    set i3 = i3 + 100;
		
		SELECT * FROM tmp;

end $$
delimiter ;

python 調用 mysql 存儲過程

import pymysql

PY_MYSQL_CONN_DICT = {
    "host" : '192.168.0.214',
    "port" : 3306,
    "user" : 'root',
    "passwd" : '123456',
    "db" : 'tmpdb'
}

conn = pymysql.connect(**PY_MYSQL_CONN_DICT)
cusor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 調用 p1 存儲過程,傳入4個參數
cusor.callproc('p1', args=(1, 2, 3, 4))

# 返回獲得的集合,即存儲函數中的 SELECT * FROM tmp; 結果
res1 = cusor.fetchall()
print(res1)

# 以 python 固定格式獲取返回的值:@_存儲過程名_0, 第一個返回值
cusor.execute("select @_p1_0, @_p1_1, @_p1_2, @_p1_3")
res2 = cusor.fetchall()
print(res2)

conn.commit()
cusor.close()
conn.close()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM