每天用一列中的数据更新另一列中的多列的sql表

时间:2019-07-19 12:54:37

标签: python sql postgresql cloud digital-ocean

我在数字海洋云上拥有postgres数据库,该数据库有多个表,第一个表和主表包含产品数据,例如item_name和item_price等。该表每天都使用python网页抓取工具进行更新,而item_price在刮板运行并填充数据库

其他表是month表,每个表有31列,第一列是item_name,其余30天是从day1到day30储存每天价格的天

我要实现的目标是在刮板每天更新表的同时,每天在item_price中捕捉趋势,因此我想在刮板运行并更新主表item_price时将此数据复制到day1,例如下一个那天我将更新后的数据复制到第2天,依此类推

我已经尝试了一些代码,但是我的解决方案都无法正常工作,我已经附加了我尝试过的代码,并且第一次可以使用,但是如果再次运行,它不会填充第二列,并且如果我尝试了一些测试,在第1天插入数据,并更改要在第2天插入的代码,第2天保持为空,只有第1天有数据

刮板中的数据首先存储在一个csv文件中,并且我尝试使用csv代替以下代码中的主表

我不是sql命令方面的专家,所以我尽我所能避免它,所以我想我做错了什么,我不明白,所以我需要一个解决方案或者如果有的话更好的方法

days = ['day1','day2','day3',
'day4','day5','day6',
'day7','day8','day9',
'day10','day11','day12',
'day13','day14','day15',
'day16','day17','day18',
'day19','day20','day21',
'day22','day23','day24',
'day25','day26','day27',
'day28','day29','day30']

months = ['jan','feb','march','apr','may','june','july','aug','sep','oct','nov','dec']

def daily_update():
    try:
        for i in range(len(months)):
            month = str(months[i])
            print(month)
            for j in range(30):
                select = "SELECT {} FROM {}".format(days[j],month)
                curr.execute(str(select))
                check = curr.fetchone()
                if check is None :
                    tempquery = """CREATE TEMP TABLE tmpp_x (ITEM_CATEGORY text,
                      ITEM_NAME text,
                      ITEM_PRICE text,
                      )"""

                    curr.execute(tempquery)
                    conn.commit()
                    try:
                        with open('Data--1.csv','r') as f:
                            curr.copy_from(f,'tmpp_x',sep=',')
                    except Exception as e:
                        print(e)
                    curr.execute("SELECT ITEM_PRICE FROM tmpp_x")
                    curr.fetchone()
                    updatequery = "UPDATE {} SET {} = tmpp_x.ITEM_PRICE FROM tmpp_x".format(month,days[j])
                    conn.commit()
                    print(updatequery)                   
                    curr.execute(updatequery)
                    cleanquery = 'DROP TABLE tmpp_x'
                    curr.execute(cleanquery)
                    conn.commit()
                    raise Exception('{} Data Has Been Added!'.format(days[j]))

    except Exception as e:
        print(e)
daily_update()

0 个答案:

没有答案