Рубрики
Без рубрики

МАДМИГРАЦИЯ

Я хотел бы представить недавно запущенный проект с открытым исходным кодом, предназначенный для миграции базы данных. Почему … помечены с миграцией, инструментами, базой данных, Python.

Я хотел бы представить недавно запущенный проект с открытым исходным кодом, предназначенный для миграции базы данных. Почему нам понадобится такой инструмент, когда существует множество инструментов миграции базы данных, которые существуют? Давайте погрузимся в детали. Нам попросили добавить некоторые новые функции в проект, который был возвращен вовремя. При входе в проект мы поняли, что структура базы данных не была разработана очень хорошо, имела сложные вопросы на таблицах. Мы решили переработать структуру базы данных и сохранить данные, как это было. Мы смотрели на многие инструменты для производства решения этого случая, однако они работали почти одинаково. В основном, процедура инструментов, получение старой структуры базы данных и преобразовывать типы данных, изменить структуру базы данных и перенести ее в другую базу данных. Мы разработали новую структуру базы данных и нашу основную цель сохранить данные. Нам нужно было предпринять данные из разных таблиц и передавать их на новую таблицу. Наверняка, другой вариант будет сбросить старую базу данных и изменить все там и импортировать его в новую базу данных. К счастью, мы не применяли этот Tecninique, мы решили сделать инструмент, который делает все это. Вот где история начинается Madmigration Отказ

Madmigration записан полностью в Python. Мы использовали силу SQLalchemy библиотека. В этом руководстве мы объясним детали того, как использовать безумию.

PIP Установить безумную Madmigration или PIP3 устанавливает -U безумига

Вы можете проверить версию: МАДМИГРАЦИЯ --ВЕРСИЯ

Давайте начнем.

Например, у вас есть старая таблица базы данных MySQL с именем Пользователь :

#Mysql
CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `fname` varchar(10) NOT NULL,
  `lname` varchar(10) NOT NULL,
  `nick` varchar(10) NOT NULL,
  `email` varchar(15) NOT NULL,
  `pass` varchar(15) NOT NULL,
 `updated` TIMESTAMP NULL,
 `created` TIMESTAMP NOT NULL,
  `companyID` INT,
  PRIMARY KEY (`id`),
  FOREIGN KEY (companyID)
  REFERENCES company(`id`)
  ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

И вы хотите перенести эту таблицу на новый стол PostgreSQL с разными именами столбцов:

#postgresql

CREATE TABLE public."User" (
created_at timestamp NOT NULL,
updated_at timestamp NULL,
id serial NOT NULL,
"name" varchar NOT NULL,
surname varchar NOT NULL,
nickname varchar NOT NULL,
email varchar NOT NULL,
"password" varchar NOT NULL,
CONSTRAINT "User_email_key" UNIQUE (email),
CONSTRAINT "User_pkey" PRIMARY KEY (id),
company_id integer REFERENCES company (id)
ON DELETE SET NULL
);

Тогда создайте Ямл Файл Schema.yml для объявления таблиц и столбцов. На первом этапе добавить Конфиги раздел. Этот раздел предназначен для подключения к базе данных. Конфиги раздел имеют два подраздела Sourceconfig , PeritionConfig :

version: 0.1.8
Configs:
  - SourceConfig:
      dbURI: "mysql://root:admin@127.0.0.1/old"
  - DestinationConfig:
      dbURI: "postgresql://root:admin@127.0.0.1/new"

Миграция Раздел предназначен для описания информации о таблицах:

migrationTables:
  - migrationTable:
      SourceTable:
        name: user
      DestinationTable:
        name: User
        create: true 

Облико напишите информацию о столбцах в МиграцияМоленки раздел.

MigrationColumns:
  - sourceColumn:
      name: id
    destinationColumn:
      name: id
      options:
        primary_key: true
        type_cast: bigint

В случае создания иностранный ключ Вы можете указать его в параметрах столбца. Определение Иностранный ключ Варианты, такие как OnDelete, Onupdate Отказ table_name Параметр является ссылкой на таблицу, Column_name это название ссылочной колонки.

  - sourceColumn:
      name: companyID
    destinationColumn:
      name: company_id
      options:
        type_cast: int
        nullable: true
        foreign_key:
          table_name: company
          column_name: id
          ondelete: "SET NULL"

Не добавлено никаких опций SourceColumn раздел, однако в PeritionColumn раздел, который мы могли бы иметь Primary_key, NULLBALE, по умолчанию, индекс, уникальный, AUTOINCREMENT, Entertain_Key, длина, Type_cast опции. Финал yaml Stutchure будет выглядеть так:

version: 0.1.8
Configs:
  - SourceConfig:
      dbURI: "mysql://root:admin@127.0.0.1/old"
  - DestinationConfig:
      dbURI: "postgresql://root:admin@127.0.0.1/new"

migrationTables:
  - migrationTable:
      SourceTable:
        name: user
      DestinationTable:
        name: User
        create: True 

      MigrationColumns:
        - sourceColumn:
            name: id
          destinationColumn: 
            name: id
            options:
              primary_key: true
              type_cast: bigint

        - sourceColumn:
            name: fname
          destinationColumn:
            name: name
            options:
              type_cast: string

        - sourceColumn:
            name: lname
          destinationColumn:
            name: surname
            options:
              type_cast: string

        - sourceColumn:
            name: email
          destinationColumn:
            name: email
            options:
              type_cast: string
              unique: true

        - sourceColumn:
            name: nick
          destinationColumn:
            name: nickname
            options:
              type_cast: string

        - sourceColumn:
            name: pass
          destinationColumn:
            name: password
            options:
              type_cast: string

        - sourceColumn:
            name: updated
          destinationColumn:
            name: updated_at
            options:
              type_cast: datetime

        - sourceColumn:
            name: created
          destinationColumn:
            name: created_at
            options:
              type_cast: datetime

        - sourceColumn:
            name: companyID
          destinationColumn:
            name: company_id
            options:
              type_cast: int
              nullable: true
              foreign_key:
                table_name: company
                column_name: id
                ondelete: "SET NULL"

Кроме того, вы можете перенести ваши данные из RDBMS к NoSQL Отказ Ниже небольшого примера для данных миграции из PostgreSQL к Монгодб Отказ Работа на PostgreSQL к Монгодб Еще идет, мы добавим другие функции как можно скорее.

version: 0.1.8
Configs:
  - SourceConfig:
      dbURI: "postgresql://root:admin@localhost:5432/olddb"
  - DestinationConfig:
      dbURI: "mongodb://localhost:27017/mydb"

migrationTables:
  - migrationTable:
      SourceTable:  #postgresql table name
        name: company  
      DestinationTable: #the collection name:
        name: Company

      MigrationColumns:
        - sourceColumn:
            name: id
          destinationColumn:
            name: id
            options:
              type_cast: uuid

        - sourceColumn:
            name: name
          destinationColumn:
            name: NAME
            options:
              type_cast: varchar

        - sourceColumn:
            name: created
          destinationColumn:
            name: CREATED
            options:    
              type_cast: datetime
        - sourceColumn:
            name: email
          destinationColumn:
            name: EMAIL
            options:     
              type_cast: string
        - sourceColumn:
            name: updated
          destinationColumn:
            name: UPDATED
            options:
              type_cast: datetime
         - sourceColumn:
            name: code
          destinationColumn:
            name: CODE
            options:      
              type_cast: string

После завершения декларации файла YAML запустите следующую команду.

Madmigrate -f Schema.yaml.

В качестве альтернативы вы можете отделить логику миграции на несколько .ыл или .json файлы. Главное, один главный .yaml Файл должен существовать, другие файлы должны быть импортированы в этот основной файл.

main.yaml файл:

version: 1.1
Configs:
  - SourceConfig:
      dbURI: "mysql://root:admin@127.0.0.1/old"
  - DestinationConfig:
      dbURI: "postgresql://root:admin@127.0.0.1/new"

migrationTables:
  - migrationTable: !import company.yaml
  - migrationTable: !import op_cond.json

Company.yaml файл

SourceTable:
  name: company
DestinationTable:
  name: company
  create: true 

MigrationColumns:
  - sourceColumn:
      name: id
    destinationColumn: 
      name: id
      options:
        primary_key: true
        type_cast: uuid

  - sourceColumn:
      name: name
    destinationColumn:
      name: name
      options:
        length: 120
        type_cast: varchar
        nullable: false

  - sourceColumn:
      name: created
    destinationColumn:
      name: created
      options:
        type_cast: datetime
  - sourceColumn:
      name: updated
    destinationColumn:
      name: updated
      options:
        type_cast: datetime
        nullable: true

Op_conds.json файл

{
    "SourceTable": {
      "name": "operation_conditions"
    },
    "DestinationTable": {
      "name": "operation_conditions",
      "create": true
    },
    "MigrationColumns": [
      {
        "sourceColumn": {
          "name": "id"
        },
        "destinationColumn": {
          "name": "id",
          "options": {
            "primary_key": true,
            "type_cast": "uuid"
          }
        }
      },
      {
        "sourceColumn": {
          "name": "interest"
        },
        "destinationColumn": {
          "name": "interest",
          "options": {
            "type_cast": "varchar",
            "length": 30,
            "nullable": false
          }
        }
      },
      {
        "sourceColumn": {
          "name": "FIFD"
        },
        "destinationColumn": {
          "name": "FIFD",
          "options": {
            "type_cast": "varchar",
            "length": 30,
            "nullable": false
          }
        }
      },
      {
        "sourceColumn": {
          "name": "comission"
        },
        "destinationColumn": {
          "name": "comission",
          "options": {
            "type_cast": "varchar",
            "length": 30,
            "nullable": false
          }
        }
      }
    ]
  }

В настоящее время мы не полностью реализованы все функциональные возможности для SQL и NoSQL Поэтому мы все еще развиваемся и добавляем новые функции на нем. Спасибо за удивительную работу нашему команда Для реализации этого инструмента.

Оригинал: “https://dev.to/turalmu95150474/madmigration-5d7g”