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

来源:互联网 发布:泰牛程序员没工作 编辑:程序博客网 时间:2024/06/05 16:22

以前的文章我们有对Python对MySQL存储过程的实际操作进行讲述,但是很多朋友都说其操作步骤不够详细,以下的文章就是对其具体的操作步骤的讲解。

AD:


    此文章主要向大家描述的是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存储过程的介绍,望你能有所收获。


    原创粉丝点击