我有一个存储过程,要求使用“ UPDATE”命令。从MySQL工作台中运行该过程时,它将正确执行。从外部Python脚本调用过程时,最终的update语句不执行。

我正在使用相同的帐户从Python脚本登录数据库,并登录到工作台。

从Python调用时,该过程中存在以前的update语句。

从Python工作的更新语句:

update filelocations set cluster_id=NULL;


无法从Python使用的更新语句:

update searchdata set cluster_id=(select cluster_id from km_data where ID =         searchdata.TweetID);


该过程使用“ root”作为定义者,我以root用户身份登录。根拥有所有特权,因此我无法确定接下来要调查的内容!

码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `overallKmeans`(tweet_limit int, cluster_num   int)
BEGIN

truncate table km_data;

update searchdata set cluster_id=NULL;
update filelocations set cluster_id=NULL;


调用语句(在工作台和Python中使用):

CALL `tweets`.`overallKmeans`(<{tweet_limit int}>, <{cluster_num int}>);


没有给出错误消息,它只是不更新​​所需的值。留下它们作为原始物。该过程似乎正常完成。

这是km_data的create语句:

CREATE TABLE `km_data` (
`primaryID` int(11) NOT NULL AUTO_INCREMENT,
`ID` bigint(20) DEFAULT NULL,
`lat` double DEFAULT NULL,
`lng` double DEFAULT NULL,
`cluster_ID` int(11) DEFAULT NULL,
 PRIMARY KEY (`primaryID`)
) ENGINE=InnoDB AUTO_INCREMENT=383 DEFAULT CHARSET=utf8;


字段“ cluster_id”是试图在“ searchdata”中更新的字段。这是唯一不适用于Python的更新。

最佳答案

我今天也遇到了同样的问题。在调用存储过程之后“提交”更改时,似乎可以使用。

脚步:
1. Cursor.callproc(“ xyz”)
2. Cursor.execute(“ commit”)

我从面临类似的pyodbc问题的人那里挑选了它...

谢谢,
中号

关于python - 来自外部调用的MySQL存储过程特权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21554632/

10-16 22:15