mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
refactor(db): 修复异步连接池无界增长,并完成 SQLAlchemy 2.0 迁移与分层归位 (#6320)
This commit is contained in:
+15
-14
@@ -1,6 +1,7 @@
|
||||
from sqlalchemy import Boolean, Column, JSON, String, select
|
||||
from typing import Any, Optional
|
||||
from sqlalchemy import Boolean, JSON, String, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.orm import Mapped, Session, mapped_column
|
||||
|
||||
from app.db import Base, db_query, db_update, async_db_query, async_db_update, get_id_column
|
||||
|
||||
@@ -12,30 +13,30 @@ class User(Base):
|
||||
# ID
|
||||
id = get_id_column()
|
||||
# 用户名,唯一值
|
||||
name = Column(String, index=True, nullable=False)
|
||||
name: Mapped[str] = mapped_column(String, index=True, nullable=False)
|
||||
# 邮箱
|
||||
email = Column(String)
|
||||
email: Mapped[Optional[str]] = mapped_column(String)
|
||||
# 加密后密码
|
||||
hashed_password = Column(String)
|
||||
hashed_password: Mapped[Optional[str]] = mapped_column(String)
|
||||
# 是否启用
|
||||
is_active = Column(Boolean(), default=True)
|
||||
is_active: Mapped[Optional[bool]] = mapped_column(Boolean(), default=True)
|
||||
# 是否管理员
|
||||
is_superuser = Column(Boolean(), default=False)
|
||||
is_superuser: Mapped[Optional[bool]] = mapped_column(Boolean(), default=False)
|
||||
# 头像
|
||||
avatar = Column(String)
|
||||
avatar: Mapped[Optional[str]] = mapped_column(String)
|
||||
# 是否启用otp二次验证
|
||||
is_otp = Column(Boolean(), default=False)
|
||||
is_otp: Mapped[Optional[bool]] = mapped_column(Boolean(), default=False)
|
||||
# otp秘钥
|
||||
otp_secret = Column(String, default=None)
|
||||
otp_secret: Mapped[Optional[str]] = mapped_column(String, default=None)
|
||||
# 用户权限 json
|
||||
permissions = Column(JSON, default=dict)
|
||||
permissions: Mapped[Optional[Any]] = mapped_column(JSON, default=dict)
|
||||
# 用户个性化设置 json
|
||||
settings = Column(JSON, default=dict)
|
||||
settings: Mapped[Optional[Any]] = mapped_column(JSON, default=dict)
|
||||
|
||||
@classmethod
|
||||
@db_query
|
||||
def get_by_name(cls, db: Session, name: str):
|
||||
return db.query(cls).filter(cls.name == name).first()
|
||||
return db.execute(select(cls).where(cls.name == name)).scalars().first()
|
||||
|
||||
@classmethod
|
||||
@async_db_query
|
||||
@@ -48,7 +49,7 @@ class User(Base):
|
||||
@classmethod
|
||||
@db_query
|
||||
def get_by_id(cls, db: Session, user_id: int):
|
||||
return db.query(cls).filter(cls.id == user_id).first()
|
||||
return db.execute(select(cls).where(cls.id == user_id)).scalars().first()
|
||||
|
||||
@classmethod
|
||||
@async_db_query
|
||||
|
||||
Reference in New Issue
Block a user