发布网友 发布时间:2022-04-27 09:49
共1个回答
热心网友 时间:2022-04-08 00:07
环境:1.MySQL5.0 或者以上支持MySQL存储过程的版本2.安装MySQL-python,目前支持到2.x步骤:一.数据库准备1.建立表view sourceprint?1 CREATE TABLE `Account` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `sm_accountName` VARCHAR(100) COLLATE gbk_chinese_ci NOT NULL DEFAULT '', `sm_password` TEXT COLLATE gbk_chinese_ci NOT NULL, `sm_onlineTime` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `accountNameIndex` (`sm_accountName`) )ENGINE=InnoDB 2.建立MySQL存储过程view sourceprint?01 CREATE PROCEDURE `proctest`(IN i_id BIGINT, IN i_onlinetime BIGINT, OUT o_accname VARCHAR(30), OUT o_a*wd VARCHAR(50)) 02 NOT DETERMINISTIC 03 CONTAINS SQL 04 SQL SECURITY DEFINER 05 COMMENT '' 06 BEGIN 07 select sm_accountName,sm_password 08 into o_accname,o_a*wd 09 from `tbl_Account` where id=i_id and sm_onlineTime=i_onlinetime limit 1; 10 END; 3.插入部分数据view sourceprint?1 INSERT INTO `Account` (`id`, `sm_accountName`, `sm_password`, `sm_onlineTime`) VALUES 2 (1, 'luoshulin', 'asdfsdf', 0), 3 (2, 'test', '1', 0), 4 (3, 'adsfasd', 'asdf', 1); 到这里数据库相关内容就准备好了接下去开始写python脚本二.python脚本view sourceprint?01 #!/usr/bin/env python 02 # -*- coding: utf8 -*- 03 import MySQLdb 04 import time 05 import os, sys, string 06 def CallProc(id,onlinetime): 07 '''调用MySQL存储过程,08 输入参数:编号,在线时间,输出:帐号,密码;09 使用输出参数方式'''10 accname=''11 a*wd=''12 conn = MySQLdb.connect(host='localhost',user='root',passwd='111111',db='ceshi')13 cur =conn.cursor()14 cur.callproc('proctest',(id,onlinetime,accname,a*wd))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 a*wd=rec[1]21 cur.close()22 conn.close();23 return accname,a*wd24 def CallProct(id,onlinetime):25 '''调用MySQL存储过程,26 输入参数:编号,在线时间,输出:帐号源码天空,密码;27 使用select返回记录方式'''28 accname=''29 a*wd=''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 a*wd=rec[1]39 cur.close()40 conn.close();41 return accname,a*wd42 name,pwd=CallProct(1,0)43 print name,pwd三.测试将python脚本保存为 并执行可以看到结果view sourceprint?1 [root@redhat-dev python]# python pycallproc.py2 luoshulin asdfsdf测试使用的是select返回记录的方式,对于使用输出参数返回结果情况也是一样的。