stock-prediction-api / scripts /check_db_counts.py
Hermes Agent
feat: clean NZ symbols, interactive user sentiment poll, and premium speedometer gauge
8459105
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())