env.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from __future__ import annotations
  2. from logging.config import fileConfig
  3. from alembic import context
  4. from sqlalchemy import engine_from_config, pool
  5. from app.core.config import settings
  6. from app.db.base import Base
  7. from app.db import models # noqa: F401
  8. config = context.config
  9. config.set_main_option("sqlalchemy.url", settings.database_url.replace("%", "%%"))
  10. if config.config_file_name is not None:
  11. fileConfig(config.config_file_name)
  12. target_metadata = Base.metadata
  13. def run_migrations_offline() -> None:
  14. context.configure(
  15. url=config.get_main_option("sqlalchemy.url"),
  16. target_metadata=target_metadata,
  17. literal_binds=True,
  18. dialect_opts={"paramstyle": "named"},
  19. compare_type=True,
  20. )
  21. with context.begin_transaction():
  22. context.run_migrations()
  23. def run_migrations_online() -> None:
  24. connectable = engine_from_config(
  25. config.get_section(config.config_ini_section, {}),
  26. prefix="sqlalchemy.",
  27. poolclass=pool.NullPool,
  28. )
  29. with connectable.connect() as connection:
  30. context.configure(
  31. connection=connection,
  32. target_metadata=target_metadata,
  33. compare_type=True,
  34. )
  35. with context.begin_transaction():
  36. context.run_migrations()
  37. if context.is_offline_mode():
  38. run_migrations_offline()
  39. else:
  40. run_migrations_online()