我在数字海洋云上拥有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()