- Add StatCan CMHC parser to fetch rental data from Statistics Canada API - Create year spine (2014-2025) as time dimension driver instead of census - Add CMA-level rental and income intermediate models - Update mart_neighbourhood_overview to use rental years as base - Fix neighbourhood_service queries to match dbt schema - Add CMHC data loading to pipeline script Data now flows correctly: 158 neighbourhoods × 12 years = 1,896 records Rent data available 2019-2025, crime data 2014-2024 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
55 lines
1.2 KiB
Python
55 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Initialize database schema.
|
|
|
|
Usage:
|
|
python scripts/db/init_schema.py
|
|
|
|
This script creates all SQLAlchemy tables in the database.
|
|
Run this after docker-compose up to initialize the schema.
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Add project root to path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
|
|
from portfolio_app.toronto.models import create_tables, get_engine # noqa: E402
|
|
|
|
|
|
def main() -> int:
|
|
"""Initialize the database schema."""
|
|
print("Initializing database schema...")
|
|
|
|
try:
|
|
engine = get_engine()
|
|
|
|
# Test connection
|
|
from sqlalchemy import text
|
|
|
|
with engine.connect() as conn:
|
|
result = conn.execute(text("SELECT 1"))
|
|
result.fetchone()
|
|
print("Database connection successful")
|
|
|
|
# Create all tables
|
|
create_tables()
|
|
print("Schema created successfully")
|
|
|
|
# List created tables
|
|
from sqlalchemy import inspect
|
|
|
|
inspector = inspect(engine)
|
|
tables = inspector.get_table_names()
|
|
print(f"Created tables: {', '.join(tables)}")
|
|
|
|
return 0
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}", file=sys.stderr)
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|