mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 16:07:01 +08:00
refactor(db): 修复异步连接池无界增长,并完成 SQLAlchemy 2.0 迁移与分层归位 (#6320)
This commit is contained in:
@@ -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},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user