首页 > 解决方案 > MySQL游标使用最后一个游标更新所有列

问题描述

我正在尝试遍历 aqi_db 数据库中 aqi 表中的 City 和练习列。我在计算机中的其他数据库上做了完全相同的事情,它工作正常,但是当我创建新程序以在不同的表上使用时,数据库无法正常工作。

这是我的桌子的样子:

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

对于每次迭代,我都试图连接 City 并练习和更新当前的练习行。所需的结果如下所示:

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) 更新实践列中的每一行,我想触发接收 city 作为参数并返回值的 python 函数,该值将在实践列中更新。注意:python 函数将调用一个 api。关于如何去做的任何提示?

标签: pythonmysqlsql

解决方案


推荐阅读