使用Python處理MySQL邏輯時如果把SQL語句直接寫在字符串中調用多次運行需要多次編譯而且代碼維護難度增加,MySQL存儲過程將SQL邏輯封裝解決這個問題,下面記錄一下測試效果。
創建測試存儲過程
delimiter $$
DROP PROCEDURE IF EXISTS `add_person`$$
CREATE PROCEDURE `add_person`(IN p_id int,p_name VARCHAR(50),p_etl_date VARCHAR(50))
BEGIN
INSERT into ods_person(id,`name`,etl_dat)
VALUES(p_id,p_name,p_etl_date);
END$$
delimiter ;
MySQL測試
SELECT * FROM ods_person;
調用存儲過程
call add_person(9,'Kobe','2020-04-15');
結果:
python調用:
import MySQLdb
mysqlCon = MySQLdb.connect(host='172.18.0.1',user='root',passwd='root',db='test',port=3306,charset='utf8')
mysqlCur = mysqlCon.cursor()
sql = 'select * from ods_person'
# 提交參數時要是用元祖即使只有一個參數也需要使用(a,)
mysqlCur.callproc('add_person',(13,'Curry','2020-04-15'))
# 需要commit否則不會執行
mysqlCon.commit()
mysqlCur.execute(sql)
print mysqlCur.fetchall()
mysqlCur.close()
mysqlCon.close()
以上操作需要注意的是傳參使用元祖,和commit。