80 lines
2.7 KiB
Python
Executable File
80 lines
2.7 KiB
Python
Executable File
import sqlite3
|
|
import pandas as pd
|
|
from tqdm import tqdm
|
|
|
|
def restructure_database():
|
|
"""Restructure database to have individual tables per ticker"""
|
|
|
|
conn = sqlite3.connect('data/stock_data.db')
|
|
|
|
# Get list of all tickers
|
|
tickers_df = pd.read_sql_query('SELECT DISTINCT ticker FROM stock_prices ORDER BY ticker', conn)
|
|
tickers = tickers_df['ticker'].tolist()
|
|
|
|
print(f"Restructuring data for {len(tickers)} tickers...")
|
|
|
|
cursor = conn.cursor()
|
|
|
|
# Create ticker_list table
|
|
cursor.execute('DROP TABLE IF EXISTS ticker_list')
|
|
cursor.execute('''
|
|
CREATE TABLE ticker_list (
|
|
ticker TEXT PRIMARY KEY,
|
|
records INTEGER
|
|
)
|
|
''')
|
|
|
|
for ticker in tqdm(tickers, desc="Creating ticker tables"):
|
|
try:
|
|
# Get data for this ticker
|
|
ticker_data = pd.read_sql_query('''
|
|
SELECT date, open, high, low, close, volume
|
|
FROM stock_prices
|
|
WHERE ticker = ?
|
|
ORDER BY date
|
|
''', conn, params=(ticker,))
|
|
|
|
if len(ticker_data) > 0:
|
|
# Create individual table for this ticker
|
|
table_name = ticker.lower()
|
|
cursor.execute(f'DROP TABLE IF EXISTS {table_name}')
|
|
cursor.execute(f'''
|
|
CREATE TABLE {table_name} (
|
|
date DATE PRIMARY KEY,
|
|
open REAL,
|
|
high REAL,
|
|
low REAL,
|
|
close REAL,
|
|
volume INTEGER
|
|
)
|
|
''')
|
|
|
|
# Insert data
|
|
for _, row in ticker_data.iterrows():
|
|
cursor.execute(f'''
|
|
INSERT INTO {table_name}
|
|
(date, open, high, low, close, volume)
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
''', (
|
|
row['date'], row['open'], row['high'],
|
|
row['low'], row['close'], row['volume']
|
|
))
|
|
|
|
# Update ticker_list
|
|
cursor.execute('''
|
|
INSERT INTO ticker_list (ticker, records)
|
|
VALUES (?, ?)
|
|
''', (ticker, len(ticker_data)))
|
|
|
|
print(f" {ticker}: {len(ticker_data)} records")
|
|
|
|
except Exception as e:
|
|
print(f" Error processing {ticker}: {e}")
|
|
continue
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
print("Database restructuring completed!")
|
|
|
|
if __name__ == "__main__":
|
|
restructure_database() |