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。

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