28 lines
767 B
Python
28 lines
767 B
Python
"""异步数据库会话,DATABASE_URL 来自环境变量。"""
|
||
from collections.abc import AsyncGenerator
|
||
|
||
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
|
||
|
||
from app.config import settings
|
||
|
||
engine = create_async_engine(
|
||
settings.database_url,
|
||
echo=False,
|
||
pool_pre_ping=True,
|
||
)
|
||
async_session_factory = async_sessionmaker(
|
||
engine, class_=AsyncSession, expire_on_commit=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
|
||
finally:
|
||
await session.close()
|