Download Backend/database/connection.py from 0xarchit/CityTrack: direct link, hf CLI and curl.
- Browser
- Download file 1.67 kB
-
https://huggingface.co/spaces/0xarchit/CityTrack/resolve/main/Backend/database/connection.py
- Command line
-
hf download hf://spaces/0xarchit/CityTrack/Backend/database/connection.py
-
curl -L -o connection.py https://huggingface.co/spaces/0xarchit/CityTrack/resolve/main/Backend/database/connection.py
1.67 kB
| from contextlib import asynccontextmanager | |
| from typing import AsyncGenerator | |
| from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine | |
| from Backend.core.config import settings | |
| database_url = settings.database_url.replace("postgresql://", "postgresql+asyncpg://") | |
| engine = create_async_engine( | |
| database_url, | |
| echo=False, | |
| pool_size=settings.db_pool_size, | |
| max_overflow=settings.db_max_overflow, | |
| pool_timeout=settings.db_pool_timeout, | |
| pool_recycle=settings.db_pool_recycle, | |
| pool_pre_ping=True, | |
| connect_args={ | |
| "statement_cache_size": settings.db_statement_cache_size, | |
| "prepared_statement_cache_size": settings.db_prepared_statement_cache_size, | |
| }, | |
| ) | |
| async_session_factory = async_sessionmaker( | |
| engine, | |
| class_=AsyncSession, | |
| expire_on_commit=False, | |
| autocommit=False, | |
| autoflush=False, | |
| ) | |
| async def get_db() -> AsyncGenerator[AsyncSession, None]: | |
| async with async_session_factory() as session: | |
| try: | |
| yield session | |
| await session.commit() | |
| except Exception: | |
| await session.rollback() | |
| raise | |
| async def get_db_context() -> AsyncGenerator[AsyncSession, None]: | |
| async with async_session_factory() as session: | |
| try: | |
| yield session | |
| await session.commit() | |
| except Exception: | |
| await session.rollback() | |
| raise | |
| async def init_db() -> None: | |
| from Backend.database.models import Base | |
| async with engine.begin() as conn: | |
| await conn.run_sync(Base.metadata.create_all) | |
| async def close_db() -> None: | |
| await engine.dispose() | |