来自外部调用的MySQL存储过程权限

时间:2014-02-04 14:03:31

标签: python mysql sql stored-procedures sql-update

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

我使用Python脚本和工作台中的相同帐户登录数据库。

从Python调用时,以前的更新语句在该过程中有效。

使用Python工作的更新语句:

update filelocations set cluster_id=NULL;

更新语句 NOT 从Python工作:

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

该过程使用“root”作为定义器,我以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;

调用语句(在workbench和Python中使用):

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

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

这是km_data的创建语句:

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 个答案:

答案 0 :(得分:0)

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

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

我是从一个与pyodbc面临类似问题的人那里挑选的......

谢谢, 中号