FastStart
September 1, 2019
Alembic - SQLAlchemy
link: Официальная документация
Инициализация
Создаст папку alembic
и поместит в нее, необходимые файлы. Название папки можно задать любое.
stdin:
$ cd yourproject $ alembic init alembic
stdout:
Creating directory /path/to/yourproject/alembic...done Creating directory /path/to/yourproject/alembic/versions...done Generating /path/to/yourproject/alembic.ini...done Generating /path/to/yourproject/alembic/env.py...done Generating /path/to/yourproject/alembic/README...done Generating /path/to/yourproject/alembic/script.py.mako...done Please edit configuration/connection/logging settings in '/path/to/yourproject/alembic.ini' before proceeding.
Создание скриптов миграции
stdin:
$ alembic revision --autogenerate -m "any comment"
Сгенерирует файл: hash_any_comment.py
Флаг --autogenerate
позволят автоматом сгенерировать скрипт для добавления в базу данных изменений. Без этого флага придется прописывать самостоятельно.
Пример, генерации скрипта hash_any_comment.py
без флага:
revision = '1975ea83b712' down_revision = None branch_labels = None from alembic import op import sqlalchemy as sa def upgrade(): pass def downgrade(): pass
Миграция
stdin:
$ alembic upgrade head
stdout:
INFO [alembic.context] Context class PostgresqlContext. INFO [alembic.context] Will assume transactional DDL. INFO [alembic.context] Running upgrade 1975ea83b712 -> ae1027a6acf
Конфигурация
Конфигурации находятся в файле alembic.ini
. По умолчанию помещаются в папку заданную при инициализации. Можно расположить где угодно. Расположение можно передать через флаг --config
при запуске alembic
.
alembic.ini: (Больше информации: link)
[alembic] # path to migration scripts script_location = alembic # template used to generate migration files # file_template = %%(rev)s_%%(slug)s # timezone to use when rendering the date # within the migration file as well as the filename. # string value is passed to dateutil.tz.gettz() # leave blank for localtime # timezone = # max length of characters to apply to the # "slug" field # truncate_slug_length = 40 # set to 'true' to run the environment during # the 'revision' command, regardless of autogenerate # revision_environment = false # set to 'true' to allow .pyc and .pyo files without # a source .py file to be detected as revisions in the # versions/ directory # sourceless = false # version location specification; this defaults # to alembic/versions. When using multiple version # directories, initial revisions must be specified with --version-path # version_locations = %(here)s/bar %(here)s/bat alembic/versions # the output encoding used when revision files # are written from script.py.mako # output_encoding = utf-8 sqlalchemy.url = driver://user:pass@localhost/dbname # Logging configuration [loggers] keys = root,sqlalchemy,alembic [handlers] keys = console [formatters] keys = generic [logger_root] level = WARN handlers = console qualname = [logger_sqlalchemy] level = WARN handlers = qualname = sqlalchemy.engine [logger_alembic] level = INFO handlers = qualname = alembic [handler_console] class = StreamHandler args = (sys.stderr,) level = NOTSET formatter = generic [formatter_generic] format = %(levelname)-5.5s [%(name)s] %(message)s datefmt = %H:%M:%S
September 1, 2019, 12:59
0 views
0 reactions