6Python全栈之路系列之MySQL存储过程
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Python全栈之路系列之MySQL存储过程存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。存储过程过接收的参数参数描述in仅用于传入参数用out仅用于返回值
千家信息网最后更新 2026年11月01日6Python全栈之路系列之MySQL存储过程
Python全栈之路系列之MySQL存储过程
存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。
存储过程过接收的参数
| 参数 | 描述 |
|---|---|
in | 仅用于传入参数用 |
out | 仅用于返回值用 |
inout | 既可以传入又可以当作返回值 |
创建存储过程
创建一个简单的存储过程
-- 修改SQL语句的结束符为%delimiter %-- 创建这个存储过程先删除DROP PROCEDURE IF EXISTS proc_p1 %CREATE PROCEDURE proc_p1()-- 开始BEGIN -- SQL语句块 select * from color;-- 结束END %-- 把SQL语句的结束符改为;delimiter ;
通过call调用存储过程
call proc_p1();
输出为
+-----+--------+| nid | title |+-----+--------+| 1 | red || 2 | yellow |+-----+--------+2 rows in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)
删除存储过程
DROP PROCEDURE proc_p1;
实例
创建一个存储过程,接收一个参数,传入的参数就是显示数据的个数,
delimiter %DROP PROCEDURE IF EXISTS proc_p1 %create PROCEDURE proc_p1( -- i1就是传入的参数,传入的数据类型必须是int类型 in i1 int)BEGIN -- 定义两个局部变量d1和d2,数据类型都为int,d1默认值为空,d2默认值为1 DECLARE d1 int; DECLARE d2 int DEFAULT 1; -- d1的值等于传入过来的i1加上定义的局部变量d2的值 SET d1 = i1 + d2; -- 查找person_info表中的nid大于d1的数据 SELECT * FROM person_info WHERE nid > d1;END %delimiter ;
查询,括号内输入定义的参数
CALL proc_p1(4);
显示结果
+-----+------+------------------+-------------+----------+----------+---------+-----------+| nid | name | email | phone | part_nid | position | caption | color_nid |+-----+------+------------------+-------------+----------+----------+---------+-----------+| 6 | w | as@anshengme.com | 13800138000 | 5 | Python | NULL | NULL || 9 | aa | a@ansheng.me | 13800138000 | 3 | DBA | NULL | 2 || 10 | b | b.ansheng.me | 13800138000 | 3 | DBA | NULL | 1 |+-----+------+------------------+-------------+----------+----------+---------+-----------+3 rows in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)
这次把nid大于5的数据全部输出出来了,传入的值是4,我们在内部让4+1了,所以就是大于5的数据.
delimiter %DROP PROCEDURE IF EXISTS proc_p1 %create PROCEDURE proc_p1( -- 接收了三个参数,类型都是int in i1 int, inout ii int, out i2 int)BEGIN -- 定义一个局部变量d2,默认值是3,数据类型为int DECLARE d2 int DEFAULT 3; -- ii = ii + 1 set ii = ii + 1; -- 如果传入的i1等于1 IF i1 = 1 THEN -- i2 = 100 + d2 set i2 = 100 + d2; -- 如果传入的i1等于2 ELSEIF i1 = 2 THEN -- i2 = 200 + d2 set i2 = 200 + d2; -- 否则 ELSE -- i2 = 1000 + d2 set i2 = 1000 + d2; END IF;END %delimiter ;
查看数据
set @o = 5;CALL proc_p1(1,@o,@u);SELECT @o,@u;
显示的结果
+------+------+| @o | @u |+------+------+| 6 | 103 |+------+------+1 row in set (0.00 sec)
使用pymysql模块操作存储过程
Python代码为:
import pymysqlconn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='as', db="dbname")cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 执行存储过程row = cursor.callproc("proc_p2",(1,2,3))# 存储过程的查询结果selc = cursor.fetchall()print(selc)# 获取存储过程返回effect_row = cursor.execute('select @_proc_p2_0, @_proc_p2_1, @_proc_p2_2')# 取存储过程返回值result = cursor.fetchone()print(result)conn.commit()cursor.close()conn.close()显示的结果
C:\Python\Python35\python.exe D:/PycharmProjects/pymysql_存储过程.py[{'nid': 1, 'name': 'man1'}, {'nid': 2, 'name': 'man2'}, {'nid': 3, 'name': 'man3'}]{'@_proc_p2_1': 3, '@_proc_p2_0': 1, '@_proc_p2_2': 103}Process finished with exit code 0存储过程使用into
into其实就是把一个select的执行结果当作另一个select的参数,例如下面的实例:
delimiter %DROP PROCEDURE IF EXISTS proc_p2 %CREATE PROCEDURE proc_p2()BEGIN -- 定义一个局部变量n,类型为int DECLARE n int; -- 获取color_nid = 2的数据并赋值给n SELECT color_nid into n FROM person_info where color_nid = 2; -- 输出nid = n的数据 SELECT * from color WHERE nid = n;END %delimiter ;
执行
call proc_p2();
结果
+-----+--------+| nid | title |+-----+--------+| 2 | yellow |+-----+--------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)
#Python全栈之路
过程
存储
数据
参数
类型
结果
语句
变量
就是
局部
输出
之路
实例
结束符
查询
主动
三个
两个
个数
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
百单网互联网科技有限公司怎么样
广州万易互联网科技有限公司
金融科技还是互联网
万易互联网科技有限公司
互联网科技革命
未来的互联网科技
互联网养老 桔豆科技
中国互联网金融科技基金
互联网科技素材视频竖屏
青海省互联网新科技
老年人脱离互联网科技的作文
昭通云南众福互联网科技有限公司
常德市电业局互联网科技部
华服互联网科技官网
互联网与医疗科技
富国互联网科技002692
互联网科技融合创新
互联网高科技行业有哪些企业
互联网对科技影响
武汉亿视互联网科技有限公司
广州万易互联网科技有限公司
江苏根荣互联网科技
互联网科技巨头监管
互联网科技会
期待互联网科技
随着互联网科技发展
玉溪互联网科技怎么选
陕西云淼互联网科技公司
郑州欣桑互联网科技有限公司
恒生科技指数 中概互联网