Python MySQL游标使用最后一个游标更新所有列
我试图在aqi_db数据库内的aqi表中遍历City和practice列。 我在我的计算机中的其他数据库上做了完全相同的事情,它工作得很好,但当我创建新的过程用于不同的表时,它不能正常工作 这就是我的桌子的样子:Python MySQL游标使用最后一个游标更新所有列,python,mysql,sql,Python,Mysql,Sql,我试图在aqi_db数据库内的aqi表中遍历City和practice列。 我在我的计算机中的其他数据库上做了完全相同的事情,它工作得很好,但当我创建新的过程用于不同的表时,它不能正常工作 这就是我的桌子的样子: ID Country City Aqi lat lng time practice 1 Canada Acton 63 51.4925 -0.257252 2019-07-24 14:00:00
ID Country City Aqi lat lng time practice
1 Canada Acton 63 51.4925 -0.257252 2019-07-24 14:00:00 33
2 Canada Alameda 46 37.7936 -122.263 2019-07-24 07:00:00 33
3 Canada Altona 46 53.5557 9.94306 2019-07-24 17:00:00 33
5 Canada Amherst 31 42.8864 -78.8784 2019-07-24 10:00:00 33
6 Canada Athens 32 33.9458 -83.3722 2019-07-24 08:00:00 33
7 Canada Massa 54 30.2583 -97.7203 2018-05-03 16:00:00 33
ID Country City Aqi lat lng time practice
1 Canada Acton 63 51.4925 -0.257252 2019-07-24 14:00:00 Acton33
2 Canada Alameda 46 37.7936 -122.263 2019-07-24 07:00:00 Alameda33
3 Canada Altona 46 53.5557 9.94306 2019-07-24 17:00:00 Altona33
5 Canada Amherst 31 42.8864 -78.8784 2019-07-24 10:00:00 Amherst33
6 Canada Athens 32 33.9458 -83.3722 2019-07-24 08:00:00 Athens33
7 Canada Massa 54 30.2583 -97.7203 2018-05-03 16:00:00 Massa33
对于每一次迭代,我都试图连接城市和实践,并更新当前实践行。预期结果如下所示:
ID Country City Aqi lat lng time practice
1 Canada Acton 63 51.4925 -0.257252 2019-07-24 14:00:00 33
2 Canada Alameda 46 37.7936 -122.263 2019-07-24 07:00:00 33
3 Canada Altona 46 53.5557 9.94306 2019-07-24 17:00:00 33
5 Canada Amherst 31 42.8864 -78.8784 2019-07-24 10:00:00 33
6 Canada Athens 32 33.9458 -83.3722 2019-07-24 08:00:00 33
7 Canada Massa 54 30.2583 -97.7203 2018-05-03 16:00:00 33
ID Country City Aqi lat lng time practice
1 Canada Acton 63 51.4925 -0.257252 2019-07-24 14:00:00 Acton33
2 Canada Alameda 46 37.7936 -122.263 2019-07-24 07:00:00 Alameda33
3 Canada Altona 46 53.5557 9.94306 2019-07-24 17:00:00 Altona33
5 Canada Amherst 31 42.8864 -78.8784 2019-07-24 10:00:00 Amherst33
6 Canada Athens 32 33.9458 -83.3722 2019-07-24 08:00:00 Athens33
7 Canada Massa 54 30.2583 -97.7203 2018-05-03 16:00:00 Massa33
但它正在回归
ID Country City Aqi lat lng time practice
1 Canada Acton 63 51.4925 -0.257252 2019-07-24 14:00:00 Massa33
2 Canada Alameda 46 37.7936 -122.263 2019-07-24 07:00:00 Massa33
3 Canada Altona 46 53.5557 9.94306 2019-07-24 17:00:00 Massa33
5 Canada Amherst 31 42.8864 -78.8784 2019-07-24 10:00:00 Massa33
6 Canada Athens 32 33.9458 -83.3722 2019-07-24 08:00:00 Massa33
7 Canada Massa 54 30.2583 -97.7203 2018-05-03 16:00:00 Massa33
我已经检查了我的代码好几次,我不明白为什么会这样。我的代码:
delimiter $$
CREATE PROCEDURE update_aqi()
begin
DECLARE v_city varchar(75);
DECLARE v_practice varchar(10);
DECLARE v_finished integer default 0;
DECLARE c1 CURSOR for select City, practice from aqi;
DECLARE continue handler for NOT FOUND set v_finished = 1;
open c1;
my_loop: LOOP
FETCH c1 into v_city, v_practice;
if v_finished = 1 then
leave my_loop;
end if;
UPDATE aqi SET practice = concat(v_city, v_practice);
END LOOP my_loop;
close c1;
end $$
call update_aqi();
进一步的目标:不是用concatenate(city,practice)更新practice列中的每一行,而是触发python函数,该函数接收city作为参数并返回值,该值将在practice列中更新。
注意:python函数将调用api。
有什么建议吗?你能分享你的代码吗?哎呀,忘了,哈哈。行了!您需要将WHERE添加到UPDATE语句中,否则您将更新整个表<代码>更新aqi设置实践=concat(v_城市,v_实践),其中id=或者更好,您可以通过一个查询更新整个表
update aqi SET practice=CONCAT(城市,实践)哦,谢谢你!我不知道为什么它以前会起作用。你对我的进一步目标有什么意见吗?你能分享你的代码吗?哦,忘了,哈哈。行了!您需要将WHERE添加到UPDATE语句中,否则您将更新整个表<代码>更新aqi设置实践=concat(v_城市,v_实践),其中id=
或者更好,您可以通过一个查询更新整个表update aqi SET practice=CONCAT(城市,实践)哦,谢谢你!我不知道为什么它以前会起作用。你对我的进一步目标有何评论?