database-operations
SKILL.md
Database Operations
Golden Rule
Data goes in the database. No random CSVs/JSON outside data/ directory.
- JSON/CSV = raw, unclean, not for production
- PostgreSQL = production data storage
DBManager Interface
from db_manager import DBManager, default_db
# Use default connection
df = default_db.fetch_df("SELECT * FROM unified_games WHERE sport = 'nba'")
# Or create custom connection
db = DBManager(connection_string="postgresql://user:pass@host:5432/db")
Key Tables
| Table | Purpose |
|---|---|
unified_games |
All games across sports |
game_odds |
Kalshi/sportsbook odds |
placed_bets |
Bet history and results |
elo_ratings |
Historical Elo snapshots |
portfolio_snapshots |
Portfolio value over time |
Common Operations
Fetch as DataFrame
df = default_db.fetch_df("""
SELECT * FROM unified_games
WHERE sport = :sport AND game_date >= :start_date
""", {"sport": "nba", "start_date": "2024-01-01"})
Execute Query
default_db.execute("""
UPDATE placed_bets SET status = 'won'
WHERE bet_id = :bet_id
""", {"bet_id": "123"})
Insert DataFrame
df.to_sql("unified_games", default_db.get_engine(),
if_exists="append", index=False)
Upsert Pattern
default_db.execute("""
INSERT INTO game_odds (game_id, source, yes_price)
VALUES (:game_id, :source, :yes_price)
ON CONFLICT (game_id, source)
DO UPDATE SET yes_price = EXCLUDED.yes_price
""", params)
Connection Defaults
From environment or docker-compose:
- Host:
localhost - Port:
5432 - User:
airflow - Password:
airflow - Database:
airflow
Data Validation
Always validate before commits:
from data_validation import validate_nba_data
report = validate_nba_data()
if not report.is_valid:
raise ValueError(f"Validation failed: {report.errors}")
Files to Reference
plugins/db_manager.py- DBManager classplugins/data_validation.py- Validation utilitiesplugins/database_schema_manager.py- Schema definitions
Weekly Installs
4
Repository
mgpowerlytics/nhlstatsFirst Seen
Jan 26, 2026
Security Audits
Installed on
opencode4
gemini-cli4
github-copilot4
codex4
cursor4
cline4