stock-prediction-api / scripts /check_db_counts.py
cramamoorthy's picture
Sync with root repo: SQLite fallback, BLOCKED handling, 250d history
d40d32b
Raw History Blame Contribute Delete
1.94 kB
import asyncio
import sys
import os
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from app.services.database_service import DatabaseService
from dotenv import load_dotenv
load_dotenv()
async def main():
db = DatabaseService(url=os.getenv("TURSO_URL"), token=os.getenv("TURSO_TOKEN"))
await db.initialize()
total_stocks = await db.get_stock_count()
active_stocks = await db.get_active_stock_count()
try:
res = await db._execute("SELECT COUNT(*) as count FROM forecasts")
forecasts_count = res[0]["count"] if res else 0
except Exception as e:
print(f"Error querying forecasts count: {e}")
forecasts_count = 0
try:
res_by_country = await db._execute("""
SELECT s.country, COUNT(DISTINCT f.symbol) as forecasted_stocks, COUNT(*) as total_forecast_rows
FROM forecasts f
JOIN (
SELECT DISTINCT
CASE WHEN symbol LIKE 'NZX:%' THEN SUBSTR(symbol, 6) ELSE symbol END || COALESCE(yfinance_suffix, '') as yf_symbol,
country
FROM stocks
) s ON s.yf_symbol = f.symbol
GROUP BY s.country
""")
except Exception as e:
print(f"Error querying forecasts by country: {e}")
res_by_country = []
print("=" * 50)
print("DATABASE COUNTS SUMMARY")
print("=" * 50)
print(f"Total Stocks: {total_stocks}")
print(f"Active Stocks: {active_stocks}")
print(f"Total Forecast Rows in DB: {forecasts_count}")
print("-" * 50)
print("Forecasted Stocks & Rows by Country:")
for row in res_by_country:
print(f" {row.get('country', 'unknown').upper()}: {row.get('forecasted_stocks', 0)} stocks ({row.get('total_forecast_rows', 0)} rows)")
print("=" * 50)
await db.close()
if __name__ == "__main__":
asyncio.run(main())