smart-line-bot / app /core /database.py
Smiel2's picture
Upload app/core/database.py with huggingface_hub
71cf735 verified
Raw
History Blame Contribute Delete
1.11 kB
"""
Database connection module with async support.
"""
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from app.core.config import settings
# Get the database URL from settings
db_url = str(settings.DATABASE_URL)
# For SQLite, don't add asyncpg prefix
if db_url.startswith("sqlite"):
engine = create_async_engine(
db_url,
echo=settings.DEBUG,
)
else:
# For PostgreSQL, add asyncpg prefix
engine = create_async_engine(
db_url.replace("postgresql://", "postgresql+asyncpg://"),
pool_pre_ping=True,
echo=settings.DEBUG,
)
# Create async SessionLocal class
AsyncSessionLocal = sessionmaker(
engine, class_=AsyncSession, expire_on_commit=False, autocommit=False, autoflush=False
)
# Backwards compatibility alias
SessionLocal = AsyncSessionLocal
# Create Base class for models
Base = declarative_base()
async def get_db() -> AsyncSession:
"""
Dependency to get async DB session.
"""
async with AsyncSessionLocal() as session:
yield session