深圳全飞鸿
标题:
Python调用MySQL存储过程实践可行
[打印本页]
作者:
zhgc
时间:
2019-7-10 10:46
标题:
Python调用MySQL存储过程实践可行
本帖最后由 zhgc 于 2019-7-10 10:51 编辑
范例SP如下,要能处理SP中人select返回,以及OUT和INOUT参数
DELIMITER $
DROP PROCEDURE IF EXISTS `sfc`.`TEST_PY`$
CREATE PROCEDURE `sfc`.`TEST_PY`(
IN A INT,
INOUT B INT,
OUT C INT
)
BEGIN
SET B:=A*10+B;
SET C:=A*100;
select a,b,c from dual
union
select 1,1,1 from dual;
END$
DELIMITER ;
复制代码
Python脚本:
import MySQLdb
db_config = {
'host': '192.168.2.10',
'user': 'root',
'passwd': 'xxxx',
'db': 'sfc',
'charset': 'utf8'
}
conn=MySQLdb.connect(**db_config)
cursor = conn.cursor()
# 执行存储过程
row = cursor.callproc("test_py",(1,2,3))
print(row)
# 存储过程的查询结果
selc = cursor.fetchall()
print(selc)
# 获取存储过程返回
effect_row = cursor.execute('select @_test_py_0, @_test_py_1, @_test_py_2')
# 取存储过程返回值
result = cursor.fetchone()
print(result)
conn.commit()
cursor.close()
conn.close()
复制代码
得到的结果是:
(1, 2, 3)
((1, 12, 100), (1, 1, 1))
(1, 12, 100)
所以结论是:
1.row就显示的参数
2.查返回SP中的查询数据,用cursor.fetchall()
3.得到OUT/INOUT的参数,用@_SPNAME_ParamIndex
欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/)
Powered by Discuz! X3.2