weixin_46523951 2021-07-07 23:24 采纳率: 75%
浏览 34
已采纳

postgresql如何循环读取填充同一张表

例如我现在在oth模式下有一张表oth.power
有三个属性month,day,fee
目前有两行数据:6 1 14
6 2 8
这张表格第一第二列的规律分别是:第一列永远是6,第二列每到一行就+1
而第三列的规律是满足斐波那契数列关系,从第三行开始,每一行的fee值都是上面两行的fee值之和
可以推断,第三行的数据为:6 3 22, 第四行为:6 4 30。。。。。。依次类推
现在需要我在这两行数据的基础上把这张表填充到共有30行为止。
虽然我可以类推,但是这样需要我人工去一行一行的用insert 的语句去插入数据,请问能否写一个sql语言使得可以自动进行这个插入的步骤?

  • 写回答

1条回答 默认 最新

  • blkq 2021-07-08 00:52
    关注

    直接写sql不好搞,除非是存储过程。
    用其它语言生成sql语句是最简单,比如用python:

    class Fibonacci(object):
    
        def __init__(self, n):
            self.n = n
            self.current = 0
            self.a = 14
            self.b = 8
    
        def __next__(self):
            if self.current == 0:
                self.current += 1
                return self.a
    
            if self.current < self.n:
                self.a, self.b = self.b, self.a + self.b
                self.current += 1
                return self.a
            else:
                raise StopIteration
    
        def __iter__(self):
            return self
    
    
    if __name__ == '__main__':
        day = 1
        fib = Fibonacci(30)
        # INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
        for num in fib:
            print(f"insert into oth.power (month,day,fee) values (6, {day}, {num});")
            day += 1
    

    结果是:

    insert into oth.power (month,day,fee) values (6, 1, 14);
    insert into oth.power (month,day,fee) values (6, 2, 8);
    insert into oth.power (month,day,fee) values (6, 3, 22);
    insert into oth.power (month,day,fee) values (6, 4, 30);
    insert into oth.power (month,day,fee) values (6, 5, 52);
    insert into oth.power (month,day,fee) values (6, 6, 82);
    insert into oth.power (month,day,fee) values (6, 7, 134);
    insert into oth.power (month,day,fee) values (6, 8, 216);
    insert into oth.power (month,day,fee) values (6, 9, 350);
    insert into oth.power (month,day,fee) values (6, 10, 566);
    insert into oth.power (month,day,fee) values (6, 11, 916);
    insert into oth.power (month,day,fee) values (6, 12, 1482);
    insert into oth.power (month,day,fee) values (6, 13, 2398);
    insert into oth.power (month,day,fee) values (6, 14, 3880);
    insert into oth.power (month,day,fee) values (6, 15, 6278);
    insert into oth.power (month,day,fee) values (6, 16, 10158);
    insert into oth.power (month,day,fee) values (6, 17, 16436);
    insert into oth.power (month,day,fee) values (6, 18, 26594);
    insert into oth.power (month,day,fee) values (6, 19, 43030);
    insert into oth.power (month,day,fee) values (6, 20, 69624);
    insert into oth.power (month,day,fee) values (6, 21, 112654);
    insert into oth.power (month,day,fee) values (6, 22, 182278);
    insert into oth.power (month,day,fee) values (6, 23, 294932);
    insert into oth.power (month,day,fee) values (6, 24, 477210);
    insert into oth.power (month,day,fee) values (6, 25, 772142);
    insert into oth.power (month,day,fee) values (6, 26, 1249352);
    insert into oth.power (month,day,fee) values (6, 27, 2021494);
    insert into oth.power (month,day,fee) values (6, 28, 3270846);
    insert into oth.power (month,day,fee) values (6, 29, 5292340);
    insert into oth.power (month,day,fee) values (6, 30, 8563186);
    

    然后把生成好的sql去数据库执行一下就好了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分