对于存储过程,可以接收参数,其参数有三类:#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
#在mysql中调用 # 设置一个返回的初始值 初始值为0 如果sql语句执行完存储过程创建好后,返回值就为1
0代表假(执行失败),1代表真(执行成功)
set @x=0;
# 传参@x的值 传给rescall 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 pymysqlmysql_host = '192.168.0.108'port = 3306mysql_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 pymysqlmysql_host = '192.168.0.108'port = 3306mysql_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}]'''