Python如何对MySQL存储过程进行调用?


  本文标签:MySQL存储过程

  此文章主要向大家描述的是Python对MySQL存储过程进行调用的正确操作步骤,以及在其实际操作中值得我们大家注意的事项的描述,你如果对其有兴趣的话你就可以点击以下的文章进行观看了  。

  环境:

  1.MySQL5.0 或者以上支持MySQL存储过程的版本

  2.安装MySQL-python,目前支持到2.x

  步骤:

  一.数据库准备

  1.建立表

  

  1. view sourceprint?1 CREATE TABLE `Account` (   
  2. `id` BIGINT(20) NOT NULL AUTO_INCREMENT,   
  3. `sm_accountName` VARCHAR(100) COLLATE gbk_chinese_ci NOT NULL DEFAULT ,   
  4. `sm_password` TEXT COLLATE gbk_chinese_ci NOT NULL,   
  5. `sm_onlineTime` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,   
  6. PRIMARY KEY (`id`),   
  7. UNIQUE KEY `accountNameIndex` (`sm_accountName`)   
  8. )ENGINE=InnoDB   

  

  2.建立MySQL存储过程

  

  1. view sourceprint?01 CREATE PROCEDURE `proctest`(IN i_id BIGINT, IN i_onlinetime BIGINT, OUT o_accname VARCHAR(30), OUT o_accpwd VARCHAR(50))   
  2. 02 NOT DETERMINISTIC   
  3. 03 CONTAINS SQL   
  4. 04 SQL SECURITY DEFINER   
  5. 05 COMMENT    
  6. 06 BEGIN   
  7. 07 select sm_accountName,sm_password   
  8. 08 into o_accname,o_accpwd   
  9. 09 from `tbl_Account` where id=i_id and sm_onlineTime=i_onlinetime limit 1;   
  10. 10 END;   

  

  3.插入部分数据

  

  1. view sourceprint?1 INSERT INTO `Account` (`id`, `sm_accountName`, `sm_password`, `sm_onlineTime`) VALUES   
  2. 2 (1, luoshulin, asdfsdf, 0),   
  3. 3 (2, test, 1, 0),   
  4. 4 (3, adsfasd, asdf, 1);   

  

  到这里数据库相关内容就准备好了接下去开始写python脚本

  二.python脚本

  

  1. view sourceprint?01 #!/usr/bin/env python   
  2. 02 # -*- coding: utf8 -*-   
  3. 03 import MySQLdb   
  4. 04 import time   
  5. 05 import os, sys, string   
  6. 06 def CallProc(id,onlinetime):   

  

  07 调用MySQL存储过程,

  08 输入参数:编号,在线时间,输出:帐号,密码;

  09 使用输出参数方式

  10 accname=

  11 accpwd=

  12 conn = MySQLdb.connect(host=localhost,user=root,passwd=111111,db=ceshi)

  13 cur =conn.cursor()

  14 cur.callproc(proctest,(id,onlinetime,accname,accpwd))

  15 cur.execute(select @_proctest_2,@_proctest_3)

  16 data=cur.fetchall()

  17 if data:

  18 for rec in data:

  19 accname=rec[0]

  20 accpwd=rec[1]

  21 cur.close()

  22 conn.close();

  23 return accname,accpwd

  24 def CallProct(id,onlinetime):

  25 调用MySQL存储过程,

  26 输入参数:编号,在线时间,输出:帐号,密码;

  27 使用select返回记录方式

  28 accname=

  29 accpwd=

  30 conn = MySQLdb.connect(host=localhost,user=root,passwd=111111,db=ceshi)

  31 cur =conn.cursor()

  32 cur.nextset()

  33 cur.execute(call ptest(%s,%s),(id,onlinetime))

  34 data=cur.fetchall()

  35 if data:

  36 for rec in data:

  37 accname=rec[0]

  38 accpwd=rec[1]

  39 cur.close()

  40 conn.close();

  41 return accname,accpwd

  42 name,pwd=CallProct(1,0)

  43 print name,pwd

  三.测试

  将python脚本保存为 并执行可以看到结果

  view sourceprint?1 [root@redhat-dev python]# python pycallproc.py

  2 luoshulin asdfsdf

  测试使用的是select返回记录的方式,对于使用输出参数返回结果情况也是一样的  。

  以上的相关内容就是对python调用MySQL存储过程的介绍,望你能有所收获  。