Alembic: получить вывод SQL из сравнения схем в скрипте - PullRequest
0 голосов
/ 28 августа 2018

Я хотел бы сравнить текущую схему БД с моей текущей моделью. Хотя compare_metadata дает хороший список требуемых операций обновления, я также хотел бы распечатать соответствующие операторы SQL (аналогично команде offline alembic upgrade head --sql, но без фактического создания файла сценария миграции ранее).

from alembic.autogenerate import compare_metadata
from alembic.migration import MigrationContext
from myapp import models
from sqlalchemy import create_engine
engine = create_engine("db_url...")
diff_list = compare_metadata(
    MigrationContext.configure(engine.connect()),
    models.meta.metadata
)

Возможно, операторы SQL можно каким-то образом сгенерировать с помощью команды produce_migrations api, которая возвращает объект MigrationScript и используется в качестве входных данных для команды compare_metadata (см. http://alembic.zzzcomputing.com/en/latest/api/autogenerate.html#customizing-revision). Thx.

1 Ответ

0 голосов
/ 01 марта 2019

Я не думаю, что он может генерировать операторы SQL, потому что они могут различаться в зависимости от используемого вами механизма БД, но вы можете сгенерировать операторы SQL Alchemy для этого:

from alembic.migration import MigrationContext
from myapp import models
from sqlalchemy import create_engine
engine = create_engine("db_url...")

mc = MigrationContext.configure(engine.connect())
diff_list = compare_metadata(mc, models.meta.metadata) # not needed for this
migrations = produce_migrations(mc, models.meta.metadata) # we need this instead
sqlalchemy_statements = render_python_code(migrations.upgrade_ops))

print sqlalchemy_statements # just to see the result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...