Skip to content
forked from eliasnvx/sql2mig

Utility for converting SQL database structure to migrations for popular frameworks.

Notifications You must be signed in to change notification settings

edev-mobi/sql2mig

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sql2mig

English | Русский

English

Overview

A utility for converting SQL database structure (CREATE TABLE) into migrations for popular frameworks (Laravel, FastAPI).

Installation

pip install -e .

Usage

Basic Command

python sql2mig.py --framework=laravel --input=schema.sql --output=migrations/

Arguments

Argument Type Description
--framework laravel | fastapi Framework selection for migration generation
--input path to .sql SQL file with DDL
--output path to folder Where to save migrations (default: migrations/)
--dialect (opt.) mysql | postgresql SQL dialect

Output

Laravel

Each CREATE TABLE is converted to a separate migration file:

migrations/
├── 2025_06_08_0001_create_users_table.php
├── 2025_06_08_0002_create_posts_table.php

The format is compatible with Laravel (Schema::create(...), Blueprint, Migration class)

FastAPI

Generation of Alembic migrations:

alembic/versions/
├── 2025_06_08_0001_create_users.py
├── 2025_06_08_0002_create_posts.py

Features

  • One file per table
  • Automatic naming: Y_m_d_His_index_create_TABLE_table.php
  • SQL types mapped to framework types
  • Support for PRIMARY KEY, NOT NULL, NULL
  • Clean code generation without unnecessary clutter

Example

Input file schema.sql

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NULL
);

CREATE TABLE posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT NOT NULL,
  title VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NULL,
  FOREIGN KEY (user_id) REFERENCES users(id)
);

Generating Laravel migrations

python sql2mig.py --framework=laravel --input=schema.sql --output=migrations/

Extending Functionality

The utility is designed with extensibility in mind to support other frameworks. To add a new framework:

  1. Create a new generator class that inherits from BaseGenerator
  2. Implement migration generation methods
  3. Add the new framework to the list of available frameworks in the main sql2mig.py file

Русский

Обзор

Утилита для конвертации SQL-структуры базы данных (CREATE TABLE) в миграции для популярных фреймворков (Laravel, FastAPI).

Установка

pip install -e .

Использование

Основная команда

python sql2mig.py --framework=laravel --input=schema.sql --output=migrations/

Аргументы

Аргумент Тип Описание
--framework laravel | fastapi Выбор фреймворка для генерации
--input путь к .sql SQL-файл с DDL
--output путь к папке Куда сохранить миграции (по умолчанию: migrations/)
--dialect (опц.) mysql | postgresql Какой SQL-диалект

Результат работы

Laravel

Каждый CREATE TABLE преобразуется в отдельный файл миграции:

migrations/
├── 2025_06_08_0001_create_users_table.php
├── 2025_06_08_0002_create_posts_table.php

Формат совместим с Laravel (Schema::create(...), Blueprint, Migration класс)

FastAPI

Генерация Alembic-миграций:

alembic/versions/
├── 2025_06_08_0001_create_users.py
├── 2025_06_08_0002_create_posts.py

Особенности

  • Один файл на одну таблицу
  • Автоматическое именование: Y_m_d_His_index_create_TABLE_table.php
  • Сопоставление типов SQL с типами фреймворка
  • Поддержка PRIMARY KEY, NOT NULL, NULL
  • Чистая генерация кода без лишнего мусора

Пример использования

Входной файл schema.sql

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NULL
);

CREATE TABLE posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT NOT NULL,
  title VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NULL,
  FOREIGN KEY (user_id) REFERENCES users(id)
);

Генерация миграций для Laravel

python sql2mig.py --framework=laravel --input=schema.sql --output=migrations/

Расширение функциональности

Утилита разработана с учетом возможности расширения для поддержки других фреймворков. Для добавления нового фреймворка необходимо:

  1. Создать новый класс генератора, наследующийся от BaseGenerator
  2. Реализовать методы генерации миграций
  3. Добавить новый фреймворк в список доступных фреймворков в основном файле sql2mig.py

About

Utility for converting SQL database structure to migrations for popular frameworks.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%