43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
"""
|
|
数据库连接配置
|
|
管理数据库引擎、会话和连接池
|
|
"""
|
|
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
from app.config import Settings
|
|
|
|
# 数据库配置
|
|
DATABASE_FILE = Settings().DB_FILE
|
|
ASYNC_DATABASE_URL = f"sqlite+aiosqlite:///{DATABASE_FILE}"
|
|
SYNC_DATABASE_URL = f"sqlite:///{DATABASE_FILE}"
|
|
|
|
# 创建异步引擎
|
|
async_engine = create_async_engine(
|
|
ASYNC_DATABASE_URL, echo=False, pool_pre_ping=True, pool_recycle=3600
|
|
)
|
|
|
|
# 创建异步会话工厂
|
|
AsyncSessionLocal = async_sessionmaker(
|
|
async_engine, class_=AsyncSession, expire_on_commit=False
|
|
)
|
|
|
|
# 创建同步引擎和会话(用于初始化)
|
|
sync_engine = create_engine(
|
|
SYNC_DATABASE_URL, echo=False, pool_pre_ping=True, pool_recycle=3600
|
|
)
|
|
SessionLocal = sessionmaker(bind=sync_engine)
|
|
|
|
|
|
async def get_db_session() -> AsyncSession:
|
|
"""获取数据库会话"""
|
|
async with AsyncSessionLocal() as session:
|
|
return session
|
|
|
|
|
|
def get_sync_session():
|
|
"""获取同步数据库会话(用于初始化等场景)"""
|
|
return SessionLocal()
|