mysql 内置功能 存储过程 创建有参存储过程

 

 

 

对于存储过程,可以接收参数,其参数有三类:

#in          仅用于传入参数用
#out        仅用于返回值用
#inout     既可以传入又可以当作返回值

 

传入参数使用格式 in 变量 数据类型

返回值使用格式 out 变量 数量类型

 

类似于python的函数 

 

要在类似于python的函数的传值,但传值格式不同

delimiter // # 设置mysql结束符合为//
create procedure p2(in n1 int,in n2 int,out res int) # 创建程序固定procedure 和p1是存储过程名字
BEGIN
    select * from db2.teacher where tid >n1 and tid <n2 ;  # sql语句
    # 调用一个执行成功与否的返回值
    set res = 1;  # 设置一个变量返回值 为1 ;结束
end //
delimiter ;

 

#在mysql中调用

# 设置一个返回的初始值 初始值为0 如果sql语句执行完存储过程创建好后,返回值就为1
0代表假(执行失败),1代表真(执行成功)
 

set @x=0;
# 传参
@x的值 传给res
call p2(2,4,@x);

select * from db2.teacher where tid >2 and tid <4

mysql> set @x=0;
Query OK, 0 rows affected (0.07 sec)

mysql> call p2(2,4,@x);
+-----+-----------------+
| tid | tname           |
+-----+-----------------+
|   3 | 刘海燕老师      |
+-----+-----------------+
1 row in set (0.11 sec)

Query OK, 0 rows affected (0.13 sec)

 

查看返回值 @x

mysql> select @x;
+------+
| @x   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

 

 
 在python中基于pymysql调用:

0 相当于 set @x=0 直接传0就可以了
callproc('p2',(2,4,0))

 

import pymysql



mysql_host = '192.168.0.108'
port = 3306
mysql_user = 'root'
mysql_pwd = '123'
encoding = 'utf8'

# 建立 连接mysql服务端

conn = pymysql.connect(
    host=mysql_host,  # mysql服务端ip
    port=port,  # mysql端口
    user=mysql_user,  # mysql 账号
    password=mysql_pwd,  # mysql服务端密码
    db='db2',  # 操作的库
    charset=encoding  # 读取字符串编码

)

# 拿到游标对象
cur = conn.cursor(pymysql.cursors.DictCursor)

'''
游标是给mysql提交命令的接口
mysql> 
把sql语句传递到这里
'''


# 执行sql语句
cur.callproc('p2',(2,4,0))
# 打印查询结果
print(cur.fetchall())



# 执行完sql语句要关闭游标和mysql连接
cur.close()
conn.close()

'''
[{'tid': 3, 'tname': '刘海燕老师'}]
'''

 

callproc()传参时候 涉及这几个参数

@_存储过程名字 _0 代表第一个参数 _1 第二个参数

@_p2_0=2,@_p2_1=4,@_p2_2=0

 

pymysql 查看返回值

用到 callproc传参的 @_p2_2

 

 

import pymysql



mysql_host = '192.168.0.108'
port = 3306
mysql_user = 'root'
mysql_pwd = '123'
encoding = 'utf8'

# 建立 连接mysql服务端

conn = pymysql.connect(
    host=mysql_host,  # mysql服务端ip
    port=port,  # mysql端口
    user=mysql_user,  # mysql 账号
    password=mysql_pwd,  # mysql服务端密码
    db='db2',  # 操作的库
    charset=encoding  # 读取字符串编码

)

# 拿到游标对象
cur = conn.cursor(pymysql.cursors.DictCursor)

'''
游标是给mysql提交命令的接口
mysql> 
把sql语句传递到这里
'''


# 执行sql语句
cur.callproc('p2',(2,4,0))
# 打印查询结果
print(cur.fetchall())

# 查看返回值
cur.execute('select @_p2_2;')
# 打印查询结果
print(cur.fetchall())



# 执行完sql语句要关闭游标和mysql连接
cur.close()
conn.close()

'''
[{'tid': 3, 'tname': '刘海燕老师'}]
[{'@_p2_2': 1}]
'''

 

posted @ 2019-03-15 17:00  minger_lcm  阅读(490)  评论(0编辑  收藏  举报