env.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. """
  2. Alembic环境配置
  3. """
  4. from logging.config import fileConfig
  5. from sqlalchemy import engine_from_config, pool
  6. from alembic import context
  7. import sys
  8. import os
  9. # 添加项目路径
  10. sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
  11. # 导入配置和模型
  12. from app.core.config import settings
  13. from app.core.database import Base
  14. from app.models import * # 导入所有模型
  15. # Alembic配置对象
  16. config = context.config
  17. # 设置数据库URL
  18. config.set_main_option("sqlalchemy.url", settings.DATABASE_URL_SYNC)
  19. # 配置日志
  20. if config.config_file_name is not None:
  21. fileConfig(config.config_file_name)
  22. # 目标元数据
  23. target_metadata = Base.metadata
  24. def run_migrations_offline() -> None:
  25. """离线模式运行迁移"""
  26. url = config.get_main_option("sqlalchemy.url")
  27. context.configure(
  28. url=url,
  29. target_metadata=target_metadata,
  30. literal_binds=True,
  31. dialect_opts={"paramstyle": "named"},
  32. )
  33. with context.begin_transaction():
  34. context.run_migrations()
  35. def run_migrations_online() -> None:
  36. """在线模式运行迁移"""
  37. connectable = engine_from_config(
  38. config.get_section(config.config_ini_section),
  39. prefix="sqlalchemy.",
  40. poolclass=pool.NullPool,
  41. )
  42. with connectable.connect() as connection:
  43. context.configure(
  44. connection=connection,
  45. target_metadata=target_metadata
  46. )
  47. with context.begin_transaction():
  48. context.run_migrations()
  49. if context.is_offline_mode():
  50. run_migrations_offline()
  51. else:
  52. run_migrations_online()