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
+20 -17
View File
@@ -1,9 +1,9 @@
from typing import List, Optional
from sqlalchemy import Column, Index, String
from sqlalchemy.orm import Session
from sqlalchemy import Index, String, delete, select
from sqlalchemy.orm import Mapped, Session, mapped_column
from app.db import Base, db_query, db_update, get_id_column
from app.db import Base, db_query, db_update, execute_dml, get_id_column
class TransferPending(Base):
@@ -22,11 +22,11 @@ class TransferPending(Base):
id = get_id_column()
# 存储
storage = Column(String, nullable=False)
storage: Mapped[str] = mapped_column(String, nullable=False)
# 源文件路径
src_path = Column(String, nullable=False)
src_path: Mapped[str] = mapped_column(String, nullable=False)
# 登记时间
created_at = Column(String)
created_at: Mapped[Optional[str]] = mapped_column(String)
__table_args__ = (
# 同一个文件重复入队只保留一条,回放时不会重复送入整理链
@@ -47,9 +47,9 @@ class TransferPending(Base):
"""
if not storage or not src_path:
return None
pending = db.query(cls).filter(
cls.storage == storage, cls.src_path == src_path
).first()
pending = db.execute(
select(cls).where(cls.storage == storage, cls.src_path == src_path)
).scalars().first()
if pending:
return pending
pending = cls(storage=storage, src_path=src_path, created_at=now_time)
@@ -68,9 +68,10 @@ class TransferPending(Base):
"""
if not storage or not src_path:
return 0
return db.query(cls).filter(
cls.storage == storage, cls.src_path == src_path
).delete(synchronize_session=False)
return execute_dml(
db, delete(cls).where(cls.storage == storage, cls.src_path == src_path),
execution_options={"synchronize_session": False},
)
@classmethod
@db_query
@@ -84,12 +85,11 @@ class TransferPending(Base):
:param limit: 单次回放上限
:return: 待整理登记列表
"""
return (
db.query(cls)
return list(db.execute(
select(cls)
.order_by(cls.created_at.asc(), cls.id.asc())
.limit(limit)
.all()
)
).scalars().all())
@classmethod
@db_update
@@ -99,4 +99,7 @@ class TransferPending(Base):
:param db: 数据库会话
:return: 删除的记录数
"""
return db.query(cls).delete(synchronize_session=False)
return execute_dml(
db, delete(cls),
execution_options={"synchronize_session": False},
)