【问题标题】:Calling MySQL Stored Procedure in Python - incorrect # of arguments error在 Python 中调用 MySQL 存储过程 - 不正确的参数错误 #
【发布时间】:2017-06-23 03:30:08
【问题描述】:

我正在尝试使用 Python 访问存储过程,在其中输入客户 ID,它将呈现一个多行表,其中包含客户在餐厅吃的多个实例以及他们吃的东西,什么时间他们吃了它,吃的月份。这是一个多行表,因为客户 ID 不是主键。

在 SQL 中,输入以下命令:

call metrics.GetFoodByCustomerID("115960981")

将为我呈现正确的表格。但是,当我在 Python 中运行以下函数时,我收到错误,即我为过程输入了不正确的参数。

[

知道我错过了什么吗?

【问题讨论】:

  • 以后请不要发代码图片。请将您的代码文本复制并粘贴到您的问题中。我想将您问题中的一行代码复制到我的答案中,但我做不到:我必须手动输入。另见meta.stackoverflow.com/questions/285551/…

标签: python mysql stored-procedures


【解决方案1】:

documentation for cursor.callproc 声明第二个参数args 应该是一个

与过程一起使用的参数序列

在你的队伍中

myCursor.callproc('metrics.GetFoodByCustomerID', ('115960981'))

您正在传递一个用括号括起来的字符串 args'115960981' 周围的括号无效,特别是它们不会将此值转换为 1 元素序列。但是,在 Python 中,字符串是序列,因此参数列表被解释为 9 个单字符字符串的序列。出现错误是因为您的存储过程不接受 9 个参数。

尝试将上面的行替换为

myCursor.callproc('metrics.GetFoodByCustomerID', ('115960981',))

这可能是您的目标。注意尾随逗号,它使括号中的表达式变成一个 1 元组。或者,改用列表:您不需要尾随逗号来创建 1 元素列表:

myCursor.callproc('metrics.GetFoodByCustomerID', ['115960981'])

【讨论】:

  • @ShabinaRayan:我不知道你从哪里想到可以在光标上调用stored_results。我链接到的文档页面上没有提到该属性,所以坦率地说,我并不惊讶您收到该错误。也许您想在我链接到的文档中使用fetchallfetchonefetchmany 方法之一?
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 2011-05-02
  • 2015-07-07
相关资源
最近更新 更多