目錄
前置:
1?數據回退
1.1 代碼
1.2?pgAdmin4?中查看
1)t_daily
2) t_stock_daily
2?數據庫導出、導入?
前置:
本博文是一個系列。在本人“數據庫專欄”-》“PostgreSQL_”開頭的博文。
1?數據回退
上一節“PostgreSQL_數據下載并保存(psycopg2)”,保存了 2023年7月11日?至 2025年2月13日?的數據。任意取一個日期,比如2025年1月10日,回退到這個日期。
1.1 代碼
def rollback_to_day_before(date_str:str):conn = connect_db()'''t_stock_daily1 找出每只股票 date_str 對應的索引位置2 遍歷 update 表格'''cur = conn.cursor()# 傳入的 date_str 可能不是交易日,如果不是交易日要找到最靠近 date_str 之前的交易日sql_q_m_str = f"select max(tradeDateOj) from t_daily where tradeDateOj <= \'{date_str}\';"cur.execute(sql_q_m_str)res0 = cur.fetchone()date_str0 = res0[0].strftime('%Y-%m-%d')sql_query_str = f"select ticker,array_position(tradeDate,\'{date_str0}\') from t_stock_daily;"cur.execute(sql_query_str)res = cur.fetchall()sql_update_str = """update t_stock_daily set tradeDate=tradeDate[1:%s],openPrice=openPrice[1:%s],highestPrice=highestPrice[1:%s],lowestPrice=lowestPrice[1:%s],closePrice=closePrice[1:%s],turnoverVol=turnoverVol[1:%s],turnoverValue=turnoverValue[1:%s],dealAmount=dealAmount[1:%s],turnoverRate=turnoverRate[1:%s],negMarketValue=negMarketValue[1:%s],marketValue=marketValue[1:%s],chgPct=chgPct[1:%s],PE=PE[1:%s],PE1=PE1[1:%s],PB=PB[1:%s],isOpen=isOpen[1:%s],vwap=vwap[1:%s] where ticker=%s;"""# 刪除 t_daily date_str之后的數據sql_delete_str = f"delete from t_daily where tradeDateOj>\'{date_str}\';"data_list = []for one in res:one_node = (one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[1],one[0])data_list.append(one_node)passtry:cur.executemany(sql_update_str,data_list)cur.execute(sql_delete_str)conn.commit()except Exception as e:print(f'error:{e}')conn.rollback()finally:cur.close()conn.close()pass
1.2?pgAdmin4?中查看
1)t_daily
2) t_stock_daily
select tradeDate[array_length(tradeDate,1)],openPrice[array_length(openPrice,1)],highestPrice[array_length(highestPrice,1)],lowestPrice[array_length(lowestPrice,1)],closePrice[array_length(closePrice,1)],turnoverVol[array_length(turnoverVol,1)],turnoverValue[array_length(turnoverValue,1)],dealAmount[array_length(dealAmount,1)],turnoverRate[array_length(turnoverRate,1)],negMarketValue[array_length(negMarketValue,1)],marketValue[array_length(marketValue,1)],chgPct[array_length(chgPct,1)],PE[array_length(PE,1)],PE1[array_length(PE1,1)],PB[array_length(PB,1)],isOpen[array_length(isOpen,1)],vwap[array_length(vwap,1)] from t_stock_daily where ticker='000001';
2?數據庫導出、導入?
導出
1?打開cmd
2 cd?到postgreSQL安裝目錄的bin目錄
執行?
pg_dump -U postgres -h 127.0.0.1 -p 5432 -F c -b -v -f E:/db_stock.dump db_stock
注意:“E:/db_stock.dump”換成自己的路徑;?db_stock換成要導出的數據庫名
導入
?
1?打開cmd
2 cd?到postgreSQL安裝目錄的bin目錄
執行?
dropdb -U postgres -h 127.0.0.1 -p 5432 db_stock
createdb -U postgres -h 127.0.0.1 -p 5432 db_stock
pg_restore -U postgres -h 127.0.0.1 -p 5432 -d db_stock -v D:/db_stock.dump