first commit
This commit is contained in:
59
servers/database/server.py
Normal file
59
servers/database/server.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from typing import Optional
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from pydantic import Field
|
||||
|
||||
from servers.base import BaseService
|
||||
from sqlmodel import create_engine
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
from sqlalchemy import Engine
|
||||
|
||||
class DatabaseSettings(BaseSettings):
|
||||
"""
|
||||
数据库服务配置类
|
||||
"""
|
||||
model_config = SettingsConfigDict(
|
||||
env_prefix="database_",
|
||||
case_sensitive=False,
|
||||
extra="ignore",
|
||||
)
|
||||
url: Optional[str] = Field(None, description="数据库连接URL")
|
||||
|
||||
class DatabaseService(BaseService[Engine]):
|
||||
"""
|
||||
数据库服务类,定义了数据库服务的基本状态和操作
|
||||
"""
|
||||
service_name: str = "database"
|
||||
|
||||
async def _initialize(self) -> Engine:
|
||||
"""
|
||||
初始化数据库服务
|
||||
"""
|
||||
setting = DatabaseSettings()
|
||||
if not setting.url:
|
||||
raise ValueError("数据库连接URL不能为空")
|
||||
engine = create_engine(setting.url)
|
||||
return engine
|
||||
|
||||
async def _shutdown(self) -> None:
|
||||
"""
|
||||
关闭数据库服务
|
||||
"""
|
||||
if not self._instance:
|
||||
return
|
||||
self._instance.dispose()
|
||||
|
||||
async def _check_health(self) -> bool:
|
||||
"""
|
||||
检查数据库服务健康状态
|
||||
"""
|
||||
if not self._instance:
|
||||
return False
|
||||
async with AsyncSession(self._instance) as session:
|
||||
await session.exec("SELECT 1")
|
||||
return True
|
||||
|
||||
database_service = DatabaseService()
|
||||
|
||||
__all__ = [
|
||||
"database_service",
|
||||
]
|
||||
Reference in New Issue
Block a user