diff --git a/app/db/models/siteuserdata.py b/app/db/models/siteuserdata.py index 17b6002c..451e182a 100644 --- a/app/db/models/siteuserdata.py +++ b/app/db/models/siteuserdata.py @@ -20,7 +20,7 @@ class SiteUserData(Base): # 用户名 username = Column(String) # 用户ID - userid = Column(Integer) + userid = Column(String) # 用户等级 user_level = Column(String) # 加入时间 diff --git a/app/schemas/site.py b/app/schemas/site.py index d8497ea1..aded2a62 100644 --- a/app/schemas/site.py +++ b/app/schemas/site.py @@ -77,7 +77,7 @@ class SiteUserData(BaseModel): # 用户名 username: Optional[str] = None # 用户ID - userid: Optional[Union[int, str]] = None + userid: Optional[str] = None # 用户等级 user_level: Optional[str] = None # 加入时间 diff --git a/database/versions/a946dae52526_2_2_1.py b/database/versions/a946dae52526_2_2_1.py new file mode 100644 index 00000000..5517c852 --- /dev/null +++ b/database/versions/a946dae52526_2_2_1.py @@ -0,0 +1,80 @@ +"""2.2.1 + +Revision ID: a946dae52526 +Revises: 5b3355c964bb +Create Date: 2025-08-20 17:50:00.000000 + +""" +import sqlalchemy as sa +from alembic import op + +from app.log import logger +from app.core.config import settings + +# revision identifiers, used by Alembic. +revision = 'a946dae52526' +down_revision = '5b3355c964bb' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + """ + 升级:将SiteUserData表的userid字段从Integer改为String + """ + connection = op.get_bind() + + if settings.DB_TYPE.lower() == "postgresql": + # PostgreSQL数据库迁移 + migrate_postgresql_userid(connection) + + +def downgrade() -> None: + """ + 降级:将SiteUserData表的userid字段从String改回Integer + """ + pass + + +def migrate_postgresql_userid(connection): + """ + PostgreSQL数据库userid字段迁移 + """ + try: + logger.info("开始PostgreSQL数据库userid字段迁移...") + + # 1. 创建临时列 + connection.execute(sa.text(""" + ALTER TABLE siteuserdata + ADD COLUMN userid_new VARCHAR + """)) + + # 2. 将现有数据转换为字符串并复制到新列 + connection.execute(sa.text(""" + UPDATE siteuserdata + SET userid_new = CAST(userid AS VARCHAR) + WHERE userid IS NOT NULL + """)) + + # 3. 删除旧列 + connection.execute(sa.text(""" + ALTER TABLE siteuserdata + DROP COLUMN userid + """)) + + # 4. 重命名新列 + connection.execute(sa.text(""" + ALTER TABLE siteuserdata + RENAME COLUMN userid_new TO userid + """)) + + logger.info("PostgreSQL数据库userid字段迁移完成") + + except Exception as e: + logger.error(f"PostgreSQL数据库userid字段迁移失败: {e}") + raise + + + + +