refactor(db): 修复异步连接池无界增长,并完成 SQLAlchemy 2.0 迁移与分层归位 (#6320)

This commit is contained in:
Aqr-K
2026-08-15 06:58:38 +08:00
committed by GitHub
parent e28de9cfe1
commit 8a11214a43
252 changed files with 11405 additions and 2889 deletions
+103
View File
@@ -0,0 +1,103 @@
from typing import Any, Optional
from app.db import DbOper
from app.db.models.plugindata import PluginData
class PluginDataOper(DbOper):
"""
插件数据管理
"""
def save(self, plugin_id: str, key: str, value: Any):
"""
保存插件数据
:param plugin_id: 插件id
:param key: 数据key
:param value: 数据值
"""
plugin = PluginData.get_plugin_data_by_key(self._db, plugin_id, key)
if plugin:
plugin.update(self._db, {
"value": value
})
else:
PluginData(plugin_id=plugin_id, key=key, value=value).create(self._db)
async def async_save(self, plugin_id: str, key: str, value: Any) -> None:
"""
异步保存插件数据
:param plugin_id: 插件ID
:param key: 数据键
:param value: 数据值
"""
plugin = await PluginData.async_get_plugin_data_by_key(
self._db, plugin_id, key
)
if plugin:
await plugin.async_update(self._db, {"value": value})
else:
await PluginData(
plugin_id=plugin_id, key=key, value=value
).async_create(self._db)
def get_data(self, plugin_id: str, key: Optional[str] = None) -> Any:
"""
获取插件数据
:param plugin_id: 插件id
:param key: 数据key
"""
if key:
data = PluginData.get_plugin_data_by_key(self._db, plugin_id, key)
if not data:
return None
return data.value
else:
return PluginData.get_plugin_data(self._db, plugin_id)
async def async_get_data(self, plugin_id: str, key: Optional[str] = None) -> Any:
"""
异步获取插件数据。
:param plugin_id: 插件id
:param key: 数据key
"""
if key:
data = await PluginData.async_get_plugin_data_by_key(
self._db, plugin_id, key
)
if not data:
return None
return data.value
return await PluginData.async_get_plugin_data(self._db, plugin_id)
def del_data(self, plugin_id: str, key: Optional[str] = None) -> Any:
"""
删除插件数据
:param plugin_id: 插件id
:param key: 数据key
"""
if key:
PluginData.del_plugin_data_by_key(self._db, plugin_id, key)
else:
PluginData.del_plugin_data(self._db, plugin_id)
def truncate(self):
"""
清空插件数据
"""
PluginData.truncate(self._db)
def get_data_all(self, plugin_id: str) -> Any:
"""
获取插件所有数据
:param plugin_id: 插件id
"""
return PluginData.get_plugin_data_by_plugin_id(self._db, plugin_id)
async def async_get_data_all(self, plugin_id: str) -> Any:
"""
异步获取插件所有数据。
:param plugin_id: 插件id
"""
return await PluginData.async_get_plugin_data_by_plugin_id(self._db, plugin_id)