001_init_database.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. """init database with SQLite Block storage
  2. Revision ID: 001_init_database
  3. Revises:
  4. Create Date: 2026-07-03
  5. 初始化数据库,包含 SQLite Block 存储方案的表结构
  6. """
  7. from alembic import op
  8. import sqlalchemy as sa
  9. revision = "001_init_database"
  10. down_revision = None
  11. branch_labels = None
  12. depends_on = None
  13. def upgrade() -> None:
  14. # ========== documents 表 ==========
  15. op.create_table(
  16. "documents",
  17. sa.Column("id", sa.String(64), primary_key=True),
  18. sa.Column("content_db_path", sa.String(1024), nullable=False),
  19. sa.Column("session_id", sa.String(128), nullable=True),
  20. sa.Column("created_by", sa.String(128), nullable=True),
  21. sa.Column(
  22. "created_at",
  23. sa.DateTime(timezone=True),
  24. server_default=sa.func.now(),
  25. nullable=False,
  26. ),
  27. sa.Column(
  28. "updated_at",
  29. sa.DateTime(timezone=True),
  30. server_default=sa.func.now(),
  31. onupdate=sa.func.now(),
  32. nullable=False,
  33. ),
  34. )
  35. op.create_index("ix_documents_session_id", "documents", ["session_id"])
  36. op.create_index("ix_documents_created_by", "documents", ["created_by"])
  37. # ========== export_records 表 ==========
  38. op.create_table(
  39. "export_records",
  40. sa.Column("id", sa.String(64), primary_key=True),
  41. sa.Column("user_id", sa.String(128), nullable=False),
  42. sa.Column("file_name", sa.String(512), nullable=False),
  43. sa.Column("file_path", sa.String(1024), nullable=False),
  44. sa.Column("file_size", sa.BigInteger(), nullable=False, server_default="0"),
  45. sa.Column("download_url", sa.String(1024), nullable=False),
  46. sa.Column("document_id", sa.String(64), nullable=True),
  47. sa.Column("style_id", sa.String(64), nullable=False, server_default="default"),
  48. sa.Column(
  49. "created_at",
  50. sa.DateTime(timezone=True),
  51. server_default=sa.func.now(),
  52. nullable=False,
  53. ),
  54. )
  55. op.create_index("ix_export_records_user_id", "export_records", ["user_id"])
  56. op.create_index("ix_export_records_document_id", "export_records", ["document_id"])
  57. def downgrade() -> None:
  58. # 删除 export_records 表
  59. op.drop_index("ix_export_records_document_id", table_name="export_records")
  60. op.drop_index("ix_export_records_user_id", table_name="export_records")
  61. op.drop_table("export_records")
  62. # 删除 documents 表
  63. op.drop_index("ix_documents_created_by", table_name="documents")
  64. op.drop_index("ix_documents_session_id", table_name="documents")
  65. op.drop_table("documents")