深圳全飞鸿

标题: Python调用MySQL存储过程实践可行 [打印本页]

作者: zhgc    时间: 2019-7-10 10:46
标题: Python调用MySQL存储过程实践可行
本帖最后由 zhgc 于 2019-7-10 10:51 编辑

范例SP如下,要能处理SP中人select返回,以及OUT和INOUT参数

  1. DELIMITER $

  2. DROP PROCEDURE IF EXISTS `sfc`.`TEST_PY`$

  3. CREATE PROCEDURE `sfc`.`TEST_PY`(
  4. IN A INT,
  5. INOUT B INT,
  6. OUT C INT
  7. )
  8. BEGIN
  9.   SET B:=A*10+B;
  10.   SET C:=A*100;

  11. select a,b,c from dual
  12. union
  13. select 1,1,1 from dual;

  14. END$

  15. DELIMITER ;
复制代码



Python脚本:

  1. import MySQLdb

  2. db_config = {
  3.   'host': '192.168.2.10',
  4.   'user': 'root',
  5.   'passwd': 'xxxx',
  6.   'db': 'sfc',
  7.   'charset': 'utf8'
  8. }

  9. conn=MySQLdb.connect(**db_config)
  10. cursor = conn.cursor()

  11. # 执行存储过程
  12. row = cursor.callproc("test_py",(1,2,3))
  13. print(row)
  14. # 存储过程的查询结果
  15. selc = cursor.fetchall()
  16. print(selc)
  17. # 获取存储过程返回
  18. effect_row = cursor.execute('select @_test_py_0, @_test_py_1, @_test_py_2')
  19. # 取存储过程返回值
  20. result = cursor.fetchone()
  21. print(result)

  22. conn.commit()
  23. cursor.close()
  24. 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