50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
"""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())
|