Как запустить миграцию Alembic в нескольких базах данных PostgreSQL?Python

Программы на Python
Ответить
Anonymous
 Как запустить миграцию Alembic в нескольких базах данных PostgreSQL?

Сообщение Anonymous »

В настоящее время у меня возникают проблемы с миграцией Alembic в несколько баз данных PostgreSQL. Предоставленный код выполняет миграцию только для первой модели, но не может обработать необходимые дополнительные модели.

sqla.py:

Код: Выделить всё

from sqlalchemy.orm import declarative_base

UnidadeBase = declarative_base()
ImplantacaoBase = declarative_base()
ChamadosBase = declarative_base()
перегонный куб env.py:[/b]

Код: Выделить всё

from logging.config import fileConfig

from sqlalchemy import engine_from_config
from sqlalchemy import pool

from alembic import context

from databasemgmt.sqla_base import UnidadeBase, ImplantacaoBase, ChamadosBase

import os
from dotenv import load_dotenv

load_dotenv()

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config

segments = {
"Unidade": {
"metadata": UnidadeBase.metadata,
"db_url": os.getenv("DB_UNIDADE_URL"),
},
"Implantacao": {
"metadata": ImplantacaoBase.metadata,
"db_url": os.getenv("DB_IMPLANTACAO_URL"),
},
"Chamados": {
"metadata": ChamadosBase.metadata,
"db_url": os.getenv("DB_CHAMADOS_URL"),
}
}

# Interpret the config file for Python logging.
# This line sets up loggers basically.
if config.config_file_name is not None:
fileConfig(config.config_file_name)

# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata

# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.

def run_migrations_offline() -> None:
"""Run migrations in 'offline' mode.

This configures the context with just a URL
and not an Engine, though an Engine is acceptable
here as well.  By skipping the Engine creation
we don't even need a DBAPI to be available.

Calls to context.execute() here emit the given string to the
script output.

"""

for segment_name, segment in segments.items():

url = segment["db_url"]
metadata = segment["metadata"]

context.configure(
url=url,
target_metadata=metadata,
literal_binds=True,
dialect_opts={"paramstyle": "named"},
)

with context.begin_transaction():
context.run_migrations()

def run_migrations_online() -> None:
"""Run migrations in 'online' mode.

In this scenario we need to create an Engine
and associate a connection with the context.

"""
for segment_name, segment in segments.items():

url = segment["db_url"]
metadata = segment["metadata"]

connectable = engine_from_config(
{"sqlalchemy.url": url},
prefix="sqlalchemy.",
poolclass=pool.NullPool,
)

with connectable.connect() as connection:
context.configure(connection=connection, target_metadata=metadata)

with context.begin_transaction():
context.run_migrations()

if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()
Ни таблицы «Implantacao», ни таблицы «Chamados» не были созданы после запуска команды Alembic Revision --autogenerate -m «Добавление таблицы Implantacao и Chamados» .
Существует ли альтернативный подход к обработке миграции для нескольких баз данных или Alembic не поддерживает эту функцию?

Подробнее здесь: https://stackoverflow.com/questions/792 ... l-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»