MySQL cursor使用最后一个cursor更新所有列

2024-10-03 17:19:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在aqi\ db数据库内的aqi表中遍历City and practice列。 我在我的计算机的其他数据库上做了完全相同的事情,它工作得很好,但当我创建新的过程在不同的表上使用时,数据库工作不正常。你知道吗

我的桌子是这样的:

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。 有什么建议吗?你知道吗


Tags: id数据库citytimecountrylnglatc1