gpt4 book ai didi

python - mySQL 触发器在控制台插入后起作用,但在脚本插入后不起作用

转载 作者:行者123 更新时间:2023-11-29 15:01:43 28 4
gpt4 key购买 nike

我的触发器有问题。

我设置了一个触发器,用于在表中插入后更新其他表。

如果我从 MySQL 控制台进行插入,一切正常,但如果我从外部 python 脚本进行插入,即使使用相同的数据,触发器也不会执行任何操作,如下所示。

我尝试将定义器更改为 'user'@'%' 和 'root'@'%',但仍然没有任何作用。

mysql> select vid_visit,vid_money from videos where video_id=487;
+-----------+-----------+
| vid_visit | vid_money |
+-----------+-----------+
| 21 | 0.297 |
+-----------+-----------+
1 row in set (0,01 sec)

mysql> INSERT INTO `table`.`validEvents` ( `id` , `campaigns_id` , `video_id` , `date` , `producer_id` , `distributor_id` , `money_producer` , `money_distributor` , `type` ) VALUES ( NULL , '30', '487', '2010-05-20 01:20:00', '1', '0', '0.009', '0.000', 'PRE' );
Query OK, 1 row affected (0,00 sec)

mysql> select vid_visit,vid_money from videos where video_id=487;

+-----------+-----------+
| vid_visit | vid_money |
+-----------+-----------+
| 22 | 0.306 |
+-----------+-----------+

DROP TRIGGER IF EXISTS `updateVisitAndMoney`//
CREATE TRIGGER `updateVisitAndMoney` BEFORE INSERT ON `validEvents`
FOR EACH ROW BEGIN
if (NEW.type = 'PRE') THEN
SET @eventcash=NEW.money_producer + NEW.money_distributor;
UPDATE campaigns SET cmp_visit_distributed = cmp_visit_distributed + 1 , cmp_money_distributed = cmp_money_distributed + NEW.money_producer + NEW.money_distributor WHERE idcampaigns = NEW.campaigns_id;
UPDATE offer_producer SET ofp_visit_procesed = ofp_visit_procesed + 1 , ofp_money_procesed = ofp_money_procesed + NEW. money_producer WHERE ofp_video_id = NEW.video_id AND ofp_money_procesed = NEW. campaigns_id;
UPDATE videos SET vid_visit = vid_visit + 1 , vid_money = vid_money + @eventcash WHERE video_id = NEW.video_id;

if (NEW.distributor_id != '') then
UPDATE agreements SET visit_procesed = visit_procesed + 1, money_producer = money_producer + NEW.money_producer, money_distributor = money_distributor + NEW.money_distributor WHERE id_campaigns = NEW. campaigns_id AND id_video = NEW.video_id AND ag_distributor_id = NEW.distributor_id;
UPDATE eventForDay SET visit = visit + 1, money = money + NEW. money_distributor WHERE date = SYSDATE() AND campaign_id = NEW. campaigns_id AND user_id = NEW.distributor_id;
UPDATE eventForDay SET visit = visit + 1, money = money + NEW.money_producer WHERE date = SYSDATE() AND campaign_id = NEW. campaigns_id AND user_id= NEW.producer_id;
ELSE
UPDATE eventForDay SET visit = visit + 1, money = money + NEW. money_producer WHERE date = SYSDATE() AND campaign_id = NEW. campaigns_id AND user_id = NEW.producer_id;
END IF;
END IF;
END
//

最佳答案

我认为您更有可能遇到 Uncaught Error ,而不是触发器未执行,特别是因为它从控制台成功执行。

您需要隔离错误发生的位置 - 触发器本身或调用脚本中。

在你的Python脚本中,打印出Python发送到MySQL执行的SQL语句,以确保它按照你的预期构建 - 例如,如果NEW.type不等于'PRE',触发器将具有执行,但不会导致任何更新。

还要确保检查插入内容是否有错误。我不是Python程序员,所以我不能告诉你这是如何完成的,但是this似乎就是您要找的。

如果这些都不会导致您遇到问题,请注释掉整个 if (NEW.type = 'PRE') THEN block 并进行简单的修改,例如将 NEW.type 设置为 '调试'。确保触发器确实执行后,连续重新测试,添加更多实际代码,直到隔离问题。

另外,根据 Marcos 的评论,如果脚本在成功完成后没有自动提交,我会感到惊讶。事实上,我会对任何脚本/语言做出这样的声明。

关于python - mySQL 触发器在控制台插入后起作用,但在脚本插入后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921546/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com