from sqlmodel import SQLModel, create_engine from sqlmodel.ext.asyncio.session import AsyncSession from sqlalchemy.orm import sessionmaker from sqlalchemy.pool import NullPool import os # Using local Postgres.app # Format: postgresql+asyncpg://user:password@host/dbname # Postgres.app usually defaults to the current user with no password user = os.getenv("USER", "postgres") DATABASE_URL = f"postgresql+asyncpg://{user}:@localhost/geoquery" engine = create_engine( DATABASE_URL, echo=True, future=True, poolclass=NullPool # Disable pooling for asyncpg if needed, or adjust ) # Async Engine for AsyncPG from sqlalchemy.ext.asyncio import create_async_engine async_engine = create_async_engine(DATABASE_URL, echo=True, future=True) async def get_session() -> AsyncSession: async_session = sessionmaker( async_engine, class_=AsyncSession, expire_on_commit=False ) async with async_session() as session: yield session async def init_db(): async with async_engine.begin() as conn: # await conn.run_sync(SQLModel.metadata.drop_all) await conn.run_sync(SQLModel.metadata.create_all)