20260730_07_add_feedback_username.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. """add feedback username snapshot
  2. Revision ID: 20260730_07
  3. Revises: 20260730_06
  4. Create Date: 2026-07-30
  5. """
  6. from __future__ import annotations
  7. from collections.abc import Sequence
  8. import sqlalchemy as sa
  9. from alembic import op
  10. revision: str = "20260730_07"
  11. down_revision: str | None = "20260730_06"
  12. branch_labels: str | Sequence[str] | None = None
  13. depends_on: str | Sequence[str] | None = None
  14. def upgrade() -> None:
  15. op.add_column(
  16. "demand_feedback",
  17. sa.Column(
  18. "feedback_username_snapshot",
  19. sa.String(length=64),
  20. nullable=False,
  21. server_default="",
  22. comment="反馈人登录账号快照",
  23. ),
  24. )
  25. feedback = sa.table(
  26. "demand_feedback",
  27. sa.column("feedback_user_id", sa.Integer()),
  28. sa.column("feedback_username_snapshot", sa.String(length=64)),
  29. )
  30. user_account = sa.table(
  31. "auth_user",
  32. sa.column("id", sa.Integer()),
  33. sa.column("username", sa.String(length=64)),
  34. )
  35. username = (
  36. sa.select(user_account.c.username)
  37. .where(user_account.c.id == feedback.c.feedback_user_id)
  38. .scalar_subquery()
  39. )
  40. op.execute(
  41. feedback.update()
  42. .where(feedback.c.feedback_username_snapshot == "")
  43. .values(feedback_username_snapshot=username)
  44. )
  45. with op.batch_alter_table("demand_feedback") as batch_op:
  46. batch_op.alter_column(
  47. "feedback_username_snapshot",
  48. existing_type=sa.String(length=64),
  49. server_default=None,
  50. )
  51. def downgrade() -> None:
  52. with op.batch_alter_table("demand_feedback") as batch_op:
  53. batch_op.drop_column("feedback_username_snapshot")