深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 623|回复: 0
打印 上一主题 下一主题

Python调用MySQL存储过程实践可行

[复制链接]

800

主题

1379

帖子

7724

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7724
跳转到指定楼层
楼主
发表于 2019-7-10 10:46:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-6-28 19:46 , Processed in 0.050898 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表