Python調用MySQL存儲過程

使用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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章