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
+15 -12
View File
@@ -1,6 +1,7 @@
from sqlalchemy import Column, String, JSON, Index, select
from typing import Any, Optional
from sqlalchemy import String, JSON, Index, delete, select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import Session
from sqlalchemy.orm import Mapped, Session, mapped_column
from app.db import (
db_query,
@@ -16,9 +17,9 @@ class PluginData(Base):
插件数据表
"""
id = get_id_column()
plugin_id = Column(String, nullable=False)
key = Column(String, nullable=False)
value = Column(JSON)
plugin_id: Mapped[str] = mapped_column(String, nullable=False)
key: Mapped[str] = mapped_column(String, nullable=False)
value: Mapped[Optional[Any]] = mapped_column(JSON)
__table_args__ = (
Index('ix_plugindata_plugin_id_key', 'plugin_id', 'key'),
@@ -27,18 +28,20 @@ class PluginData(Base):
@classmethod
@db_query
def get_plugin_data(cls, db: Session, plugin_id: str):
return db.query(cls).filter(cls.plugin_id == plugin_id).all()
return list(db.execute(select(cls).where(cls.plugin_id == plugin_id)).scalars().all())
@classmethod
@async_db_query
async def async_get_plugin_data(cls, db: AsyncSession, plugin_id: str):
result = await db.execute(select(cls).where(cls.plugin_id == plugin_id))
return result.scalars().all()
return list(result.scalars().all())
@classmethod
@db_query
def get_plugin_data_by_key(cls, db: Session, plugin_id: str, key: str):
return db.query(cls).filter(cls.plugin_id == plugin_id, cls.key == key).first()
return db.execute(
select(cls).where(cls.plugin_id == plugin_id, cls.key == key)
).scalars().first()
@classmethod
@async_db_query
@@ -53,17 +56,17 @@ class PluginData(Base):
@classmethod
@db_update
def del_plugin_data_by_key(cls, db: Session, plugin_id: str, key: str):
db.query(cls).filter(cls.plugin_id == plugin_id, cls.key == key).delete()
db.execute(delete(cls).where(cls.plugin_id == plugin_id, cls.key == key))
@classmethod
@db_update
def del_plugin_data(cls, db: Session, plugin_id: str):
db.query(cls).filter(cls.plugin_id == plugin_id).delete()
db.execute(delete(cls).where(cls.plugin_id == plugin_id))
@classmethod
@db_query
def get_plugin_data_by_plugin_id(cls, db: Session, plugin_id: str):
return db.query(cls).filter(cls.plugin_id == plugin_id).all()
return list(db.execute(select(cls).where(cls.plugin_id == plugin_id)).scalars().all())
@classmethod
@async_db_query
@@ -71,4 +74,4 @@ class PluginData(Base):
cls, db: AsyncSession, plugin_id: str
):
result = await db.execute(select(cls).where(cls.plugin_id == plugin_id))
return result.scalars().all()
return list(result.scalars().all())