"""Debug: check SQLAlchemy ORM category loading""" import asyncio import os import sys sys.path.insert(0, '/app') os.chdir('/app') from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker, selectinload from sqlalchemy import select from app.models.ticket import Ticket from app.models.category import Category async def run(): database_url = os.environ.get('DATABASE_URL', 'postgresql+asyncpg://postgres:postgres@db:5432/servicemanager') engine = create_async_engine(database_url, echo=True) async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) async with async_session() as session: # Test selectinload result = await session.execute( select(Ticket) .options(selectinload(Ticket.category)) .where(Ticket.category_id != None) .limit(3) ) tickets = result.scalars().all() print(f"\n=== ORM RESULTS ({len(tickets)} tickets) ===") for t in tickets: print(f" {t.ticket_number}: category_id={t.category_id}, category={t.category}") if t.category: print(f" -> category.name={t.category.name}") else: print(f" -> category is None!") # Check if Category model can be queried directly r2 = await session.execute(select(Category).limit(3)) cats = r2.scalars().all() print(f"\n=== DIRECT CATEGORY QUERY ({len(cats)} categories) ===") for c in cats: print(f" id={c.id}, name={c.name}") await engine.dispose() asyncio.run(run())