py.lib.aw_db_tools

Yohn Y. 2024-02-27

0:4b0d10bfa023 Go to Latest

py.lib.aw_db_tools/docs/db-migrator.md

..init

History
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/docs/db-migrator.md	Tue Feb 27 21:06:11 2024 +0300
     1.3 @@ -0,0 +1,83 @@
     1.4 +# db_migrator
     1.5 +
     1.6 +## Окружение
     1.7 +
     1.8 +Для обеспечения миграции должен быть развёрнут каталог с данными миграции и в БД присутствовать отношение, хранящее версию текущей схемы.
     1.9 +
    1.10 +Для организации миграции необходимо создать и поддерживать директорию определённой структуры:
    1.11 +
    1.12 +```yaml
    1.13 +- schema.sql: Файл с начальной схемой данных
    1.14 +  patch: # Каталог с изменениями
    1.15 +  - 0.sql
    1.16 +  - 1.sql
    1.17 +  # ...
    1.18 +```
    1.19 +
    1.20 +Схема таблицы с версией:
    1.21 +
    1.22 +```sql
    1.23 +CREATE TABLE app_version_info (
    1.24 +   version integer default -1
    1.25 +);
    1.26 +```
    1.27 +
    1.28 +Имя таблицы значения не имеет, так как задаётся при вызове класса миграции. Однако **схема должна** соответствовать.
    1.29 +
    1.30 +В методах принимающих `<tt class="remarkup-monospaced">db</tt>`, ему нужно передавать объект <tt class="remarkup-monospaced">connection</tt> `<tt class="remarkup-monospaced">DB API 2</tt>` стандартный для <tt class="remarkup-monospaced">Python</tt>.
    1.31 +
    1.32 +БД, за версией которой мы следим, естественно должна взаимодействовать посредством простого <tt class="remarkup-monospaced">SQL</tt>. Модуль не выполняет каких-то сложных манипуляций, а простым `<tt class="remarkup-monospaced">SELECT</tt>` запрашивает данные, и исполняет `<tt class="remarkup-monospaced">UPDATE</tt>` при обновлении данных о версии
    1.33 +
    1.34 +#### Структура файла схемы и файлов изменений
    1.35 +
    1.36 +Файл схемы должен состоять из отдельных команд на изменение схемы разделённых маркетом `<tt class="remarkup-monospaced">--</tt>`, который должен идти первым не пробельным символом. По данному маркеру происходит разбиение файла на отдельные команды. После этих символов содержание остальной строки игнорируется, а сама строка в команду не входит.
    1.37 +
    1.38 +Каждая команда исполняется отдельно и после её выполнения происходит <tt class="remarkup-monospaced">commit</tt>. Поэтому необходимо **внимательно** следить за согласованностью данных после применения команды.
    1.39 +
    1.40 +**Имена файлов изменений** должны оканчиваться на <tt class="remarkup-monospaced">.sql</tt> (регистр не важен) и первые символы до точки должны приводится к числу. Данное число будет версией, к торовой данный файл приводит схему.
    1.41 +
    1.42 +То есть имя файла рекомендуется составлять из 3-х компонентов, разделённых точками:
    1.43 +
    1.44 +```
    1.45 +00001.some_comment.sql
    1.46 +```
    1.47 +
    1.48 +**где:**
    1.49 +
    1.50 +- `<tt class="remarkup-monospaced">00001</tt>` - версия, количество нулей роли не играет
    1.51 +- `<tt class="remarkup-monospaced">some_comment</tt>` - пояснение к изменению, не является обязательным
    1.52 +- `<tt class="remarkup-monospaced">sql</tt>` - расширение файла, относящее его к <tt class="remarkup-monospaced">SQL</tt>.
    1.53 +
    1.54 +### Документация
    1.55 +
    1.56 +#### Классы
    1.57 +
    1.58 +<div class="remarkup-table-wrap" id="bkmrk-"></div><div class="remarkup-table-wrap" id="bkmrk-%D0%98%D0%BC%D1%8F-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-"><div class="remarkup-table-wrap"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 21.3818%;"></col><col style="width: 78.5935%;"></col></colgroup><tbody><tr><th class="align-center" style="background-color: rgb(236, 240, 241); vertical-align: bottom;">**Имя класса**</th><th class="align-center" style="background-color: rgb(236, 240, 241); vertical-align: bottom;">**Описание**</th></tr><tr><td>`<tt class="remarkup-monospaced">MigrateManager</tt>`</td><td>Менеджер миграции. Выполняет всю работу</td></tr><tr><td>`<tt class="remarkup-monospaced">MigrateError</tt>`</td><td>Класс собственных исключений модуля</td></tr></tbody></table>
    1.59 +
    1.60 +</div></div>#### Методы класса `<tt class="remarkup-monospaced">MigrateManager</tt>`
    1.61 +
    1.62 +##### Конструктор
    1.63 +
    1.64 +**Параметры:**
    1.65 +
    1.66 +<table border="1" id="bkmrk-control_table-str-o-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 14.953%;"></col><col style="width: 10.8749%;"></col><col style="width: 4.36944%;"></col><col style="width: 69.6543%;"></col></colgroup><tbody><tr><td>`<tt class="remarkup-monospaced">control_table</tt>`</td><td>`<tt class="remarkup-monospaced">str</tt>`</td><td>`<tt class="remarkup-monospaced">O</tt>`</td><td>Имя таблицы, хранящей версию (схема её дана выше)</td></tr><tr><td>`<tt class="remarkup-monospaced">migrate_env</tt>`</td><td>`<tt class="remarkup-monospaced">str(path)</tt>`</td><td>`<tt class="remarkup-monospaced">O</tt>`</td><td>Каталог с файлами миграции. Структура описана выше</td></tr></tbody></table>
    1.67 +
    1.68 +**Выполняет:** общие проверки среды, команд на БД не вызывает
    1.69 +
    1.70 +##### `<tt class="remarkup-monospaced">init_db</tt>`
    1.71 +
    1.72 +**Параметры:**
    1.73 +
    1.74 +<table border="1" id="bkmrk-db-%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82-%D0%91%D0%94-o-%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 7.78547%;"></col><col style="width: 11.6164%;"></col><col style="width: 4.44811%;"></col><col style="width: 76.1253%;"></col></colgroup><tbody><tr><td>`<tt class="remarkup-monospaced">db</tt>`</td><td>`<tt class="remarkup-monospaced">Объект БД</tt>`</td><td>`<tt class="remarkup-monospaced">O</tt>`</td><td>Объект БД, должен соответствовать описанному выше интерфейсу</td></tr></tbody></table>
    1.75 +
    1.76 +**Выполняет:** Исполнение на БД команд из файла начальной схемы
    1.77 +
    1.78 +##### `<tt class="remarkup-monospaced">check</tt>`
    1.79 +
    1.80 +**Параметры:**
    1.81 +
    1.82 +<table border="1" id="bkmrk-db-%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82-%D0%91%D0%94-o-%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA-1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 4.81957%;"></col><col style="width: 12.4815%;"></col><col style="width: 4.50132%;"></col><col style="width: 78.0493%;"></col></colgroup><tbody><tr><td>`<tt class="remarkup-monospaced"></tt>db`</td><td>`Объект БД`</td><td>`O`</td><td>Объект БД, должен соответствовать описанному выше интерфейсу</td></tr></tbody></table>
    1.83 +
    1.84 +**Выполняет:** Проверку версию схемы БД, и исполнение на БД команд из файлов версий выше текущей на БД.
    1.85 +
    1.86 +<p class="callout warning">При отсутствии таблицы модуль просто возбудит исключение, причём это исключение возбудит сама база, поскольку запрошенной таблицы в ней не окажется.</p>
    1.87 \ No newline at end of file