Python调用pymysql组件MySQL存储过程无法得到返回参数

Python调用MySQL存储过程的返回参数

1. 问题描述

MySQL的存储过程如下,入口参数两个,出口参数1个:

DELIMITER $$
create procedure pro_test_args(in a int ,in b int ,out t_num int)
beginset t_num = a * b;END $$

通过Python调用mysql的存储过程,得到返回参数。

import pymysqlglobal_config = {"host": "127.0.0.1","user": "root","password": "mysqlpwd","database": "mysqldb","use_unicode": "True","charset": "utf8"
}
global_db = pymysql.connect(**global_config)
cursor = global_db.cursor()
para =[5,6,0]
result = cursor.callproc('pro_test_args',para)
print(result[2])
print (result)
print (para)
sql_string = "select * from tb_student limit 5;"
record = cursor.execute(sql_string)print(record)
res = cursor.fetchall()for r in res :print(r)cursor.close()    

执行结果:
result返回参数是list,入口参数para也是list ,结果不正确,应该是30 。

0
[5, 6, 0]
[5, 6, 0]
5
('HTMXJHRSZS', 63, 3, datetime.date(2023, 10, 14))
('GTMWQCYWDP', 98, 3, datetime.date(2023, 11, 2))
('ABCVACMCRT', 74, 3, datetime.date(2023, 8, 3))
('UQUUSYZIXJ', 87, 2, datetime.date(2023, 11, 3))
('ZYPAUIHBZI', 83, 3, datetime.date(2023, 7, 15))

pymysql的版本:

print(pymysql.__version__)
1.0.3

经过反复测试,pymysql无法调用存储过程的返回值,一直以为程序上,或者mysql上有问题,就用了最简单的存储过程,还是不能正确的取得返回值。

注意:
pymysql无法调用存储过程的返回值!!!

2.解决方法

更换Python访问mysql的组件,mysql-connector-python
用pip 安装如下:


# pip install mysql-connector-python
Looking in indexes: https://pypi.douban.com/simple/
Collecting mysql-connector-pythonDownloading https://mirrors.cloud.tencent.com/pypi/packages/8c/ad/4f906a7460821faa7a5ed4daa93f07362e45c9c9966c7100faf5354881f0/mysql_connector_python-8.2.0-cp38-cp38-manylinux_2_17_x86_64.whl (31.6 MB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 31.6/31.6 MB 814.7 kB/s eta 0:00:00
Collecting protobuf<=4.21.12,>=4.21.1Downloading https://mirrors.cloud.tencent.com/pypi/packages/e7/a2/3273c05fc5d959fa90de6453ebd6d45c6d4fab3ec212d631625ea5780921/protobuf-4.21.12-cp37-abi3-manylinux2014_x86_64.whl (409 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 409.8/409.8 kB 850.9 kB/s eta 0:00:00
Installing collected packages: protobuf, mysql-connector-pythonAttempting uninstall: protobufFound existing installation: protobuf 4.22.3Uninstalling protobuf-4.22.3:Successfully uninstalled protobuf-4.22.3
Successfully installed mysql-connector-python-8.2.0 protobuf-4.21.12
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#                       

Python调用程序一样:

from mysql.connector import MySQLConnection, Errorconn = MySQLConnection(**global_config)
cursor = conn.cursor()para =[5,3,0]
result = cursor.callproc('pro_test_args',para)print(result[2])
print(result)
print(para)

执行结果如下:
result 调用返回参数是tuple,入口参数是list ,结果正确

15
(5, 3, 15)
[5, 3, 0]

pymysql调用存储过程的返回值,存在bug!!
一下午的时间验证,比较坑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python OrderedDict类(有序字典)

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 创建有序字典 import collectionsdic collections.OrderedDict() dic[k1] v1 dic[k2] v2 dic[k3] v3 print(dic)#输出&#xff1a;OrderedDict([(k1, v1), (…

C#中.NET 7.0不再支持ADO.NET,.NET Framwork依旧支持

目录 一、.NET 7.0框架下任何应用不再支持ADO.NET 二、.NET Framwork框架下Windows窗体应用支持ADO.NET 三、.NET 7.0不支持ADO.NET的真正原因 经过一阵折腾&#xff0c;终于可以确证C#中.NET框架不再支持用户通过ADO.NET的实体框架模型访问数据库&#xff0c;无论是.NET 7…

Rc与Arc实现1vN所有权机制

Rc与Arc实现1vN所有权机制 观察引用计数的变化一个例子多线程无力的Rc< T >Arc Rust所有权机制要求一个值只能有一个所有者&#xff0c;在大多数情况下&#xff0c;都没有问题&#xff0c;但是考虑以下情况&#xff1a; 在图数据结构中&#xff0c;多个边可能会拥有同一个…

C# .NET Core API Controller以及辅助专案

准备工作 Windows 10Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)C#将方法封装(据说可以提高效率,就像是我们用的dll那种感觉新增专案作为我们API的辅助专案(作用类似dll&#xff0c;此处&#xff0c;你也可以在你自己的API专案里建文件夹&#xff0c;但…

MySQL---存储过程

存储过程的相关概念 是一组为了完成特定功能的sql语句的集合&#xff0c;类似于函数 写好了一个存储过程之后&#xff0c;我们可以像函数一样随时调用sql的集合。 复杂的&#xff0c;需要很多sql语句联合执行完成的任务 存储过程再执行上比sql语句的执行速度更快&#xff0c…

js 求数组中的对象某个属性和

可以直接看下效果 代码&#xff1a; <script>let list [{num: 1,price: 10,},{num: 2,price: 10,},{num: 3,price: 10,},{num: 4,price: 10,},]// for循环 求总数和 num的和let num 0for (let i 0; i < list.length; i) {num list[i].num}console.log(第一种&am…

学习c#的第三天

目录 C# 数据类型 值类型&#xff08;Value types&#xff09; 引用类型&#xff08;Reference types&#xff09; 指针类型&#xff08;Pointer types&#xff09; C# 类型转换 隐式类型转换 显式类型转换 类型之间的转换 - Convert 和 Parse Convert.ToInt32() 与 i…

AirTag追踪汽车

美国华盛顿特区&#xff0c;11月4日&#xff0c;在一项全新的抗击车辆盗窃的措施中&#xff0c;市长穆里尔•鲍泽签署了一项新计划&#xff0c;将向该市车辆盗窃频率较高的社区居民免费提供苹果AirTag追踪器。 AirTag是苹果公司推出的一款蓝牙跟踪设备&#xff0c;它依靠Findm…

从单体到微服务:使用Spring Boot构建事件驱动的Java应用程序

Spring Boot是Pivotal团队设计的一种微服务框架&#xff0c; 基于Spring开发&#xff0c;用于简化新Spring应用的初始搭建及开发过程&#xff0c;提升Spring 开发者的体验。它秉持“约定大于配置”的思想&#xff0c;集成了大量开箱即用的第三方库&#xff0c;支持绝大多数开源…

asp.net学院网上报销系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net学院网上报销系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net学院网上报销系统 应用技术…

基于飞浆resnet50的102分类

目录 1.数据预处理 2.数据导入 3.模型导入 4.批训练 5. 输出结果 6.结果参考 1.数据预处理 Ttransforms.Compose([transforms.Resize((250,250)),transforms.RandomCrop(size224),transforms.RandomHorizontalFlip(0.5),transforms.RandomRotation(degrees15),transforms.Color…

navicat导入.sql文件出现:[ERR] 1067 - Invalid default value for ‘create_date‘

比较老的系统生成的数据库导入5.7时报错[Err] 1067 - Invalid default value for create_time 错误分析 表中的第一个TIMESTAMP列&#xff08;如果未声明为NULL或显示DEFAULT或ON UPDATE子句&#xff09;将自动分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属…

ElasticSearch文档分析

ElasticSearch文档分析 包含下面的过程&#xff1a; 将一块文本分成适合于倒排索引的独立的 词条将这些词条统一化为标准格式以提高它们的“可搜索性”&#xff0c;或者 recall 分析器执行上面的工作。分析器实际上是将三个功能封装到了一个包里&#xff1a; 字符过滤器 首先&a…

【性能测试】非GUI模式Jemter压测+TPS性能拐点详细,一篇带你打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 非GUI模式执行Jem…

RK3568驱动指南|第七篇-设备树-第64章 device_node转换成platform_device实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

SOLIDWORKS软件提供了哪些特征造型方法?硕迪科技

SOLIDWORKS作为一款三维设计软件&#xff0c;为用户提供了多种特征造型方法&#xff0c;以下是其中几种常用的&#xff1a; 实体建模特征&#xff1a;SOLIDWORKS使用实体建模技术来创建和编辑三维几何体。通过使用基本几何体&#xff08;如立方体、圆柱体、圆锥体等&#xff09…

Spring-Security前后端分离权限认证

前后端分离 一般来说&#xff0c;我们用SpringSecurity默认的话是前后端整在一起的&#xff0c;比如thymeleaf或者Freemarker&#xff0c;SpringSecurity还自带login登录页,还让你配置登出页,错误页。 但是现在前后端分离才是正道&#xff0c;前后端分离的话&#xff0c;那就…

@ConfigurationProperties使用

一直有个疑问,在使用ConfigurationProperties注解作用一个配置类时,如果该配置类继承了一个父类,那么父类的那些配置字段是否可以读取配置信息。 答案是可以的&#xff0c;前提是父类对应字段的set方法是public。 BaseProperties.java Getter Setter public class BasePropert…

for循环、while循环和do while循环有什么不同

for循环、while循环和do while循环是三种常见的循环语句&#xff0c;它们的主要不同点在于循环条件的判断时机和执行顺序。具体如下&#xff1a; for循环 for循环适用于已知循环次数的循环结构&#xff0c;它的语法格式为&#xff1a; for (初始化表达式; 循环条件; 更新表达…

深度学习之pytorch第一课

学习使用pytorch&#xff0c;然后进行简单的线性模型的训练与保存 学习代码如下&#xff1a; import numpy as np import torch import torch.nn as nn x_value [i for i in range(11)] x_train np.array(x_value,dtypenp.float32) print(x_train.shape) x_train x_train.r…