Skip to main content

Генератор моделей sqlalchemy из таблиц базы данных

Project description

db-model-generator

Пакет для автоматической генерации моделей SQLAlchemy и форм WTForms на основе таблиц базы данных.

Установка

pip install db-model-generator

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

Командная строка

Основная команда для использования из командной строки:

db-model-generator [ОПЦИИ] DATABASE TABLE_NAME [OUTPUT] [CONFIG]

Основные аргументы:

  • database - URL базы данных (например: sqlite:///example.db)

  • table_name - имя таблицы для генерации

  • output - имя выходного файла (опционально)

  • config - путь к JSON файлу конфигурации (опционально)

Опции:

  • --database, --table-name, --output, --config - альтернативный способ указания основных аргументов

  • --default-rename, -r - переименовать классы в Model и Form

  • --only-model, -m - создать только модель

  • --only-form, -f - создать только форму

  • --classic-sqlalchemy, -s - создать модель sqlalchemy вместо flask_sqlalchemy

  • --tab, -t - заменить 4 пробела символом табуляции \t

  • --translate-labels, -l - перевести labels в форме (указать код языка)

  • --label-original-language - оригинальный язык labels (по умолчанию: 'en')

  • --log-mode, --log, -V, -L - включить логирование

  • --version, -v - показать версию пакета

  • --env, -e - путь к файлу окружения (.env)

  • --submit-button, --submit, -s - текст для кнопки submit (если не указан, то кнопка не добавляется)

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

# Базовая генерация модели и формы
db-model-generator sqlite:///example.db users

# Генерация только модели
db-model-generator sqlite:///example.db users --only-model

# Генерация с сохранением в файл
db-model-generator sqlite:///example.db users models.py

# Использование конфигурационного файла
db-model-generator sqlite:///example.db users --config config.json

# Перевод labels на русский язык
db-model-generator sqlite:///example.db users --translate-labels ru

# Классический SQLAlchemy вместо Flask-SQLAlchemy
db-model-generator sqlite:///example.db users --classic-sqlalchemy

# Убрать кнопку подтверждения из формы
db-model-generator sqlite:///example.db users --submit-button "Send"

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

from db_model_generator import generate

# Базовая генерация
generate(
    database="sqlite:///example.db",
    table_name="users"
)

# Расширенная генерация с опциями
generate(
    database="sqlite:///example.db",
    table_name="users",
    output="models.py",
    config="config.json",
    only_model=True,
    classic_sqlalchemy=False,
    translate_labels="ru",
    log_mode=True,
    submit='Send'
)

Параметры функции generate():

  • database (str) - URL базы данных

  • table_name (str) - имя таблицы

  • output (str, опционально) - путь к выходному файлу

  • config (str, опционально) - путь к JSON файлу конфигурации

  • default_rename (bool) - переименовать классы в Model и Form

  • only_model (bool) - генерировать только модель

  • only_form (bool) - генерировать только форму

  • classic_sqlalchemy (bool) - использовать классический SQLAlchemy

  • tab (bool) - использовать табуляцию вместо пробелов

  • translate_labels (str, опционально) - код языка для перевода labels

  • label_original_language (str) - исходный язык labels (по умолчанию 'en')

  • log_mode (bool) - включить логирование

  • env (str, опционально) - путь к файлу окружения

  • submit (str, опционально) - текст для кнопки submit (если None, то кнопка не добавляется)

Конфигурационный файл

Вы можете создать JSON файл конфигурации для настройки генерации:

{
    "model": {
        "base_class": "db.Model",
        "imports": [
            "from flask_sqlalchemy import SQLAlchemy",
            "from datetime import datetime"
        ],
        "exclude_columns": ["created_at", "updated_at"],
        "type_mapping": {
            "string": "db.String",
            "text": "db.Text",
            "integer": "db.Integer",
            "float": "db.Float",
            "boolean": "db.Boolean",
            "datetime": "db.DateTime",
            "date": "db.Date"
        }
    },
    "form": {
        "base_class": "FlaskForm",
        "imports": [
            "from flask_wtf import FlaskForm",
            "from wtforms import StringField, TextAreaField, IntegerField, FloatField, BooleanField, DateField, DateTimeField, SelectField, SubmitField",
            "from wtforms.validators import DataRequired, Email, Length, NumberRange"
        ],
        "field_mapping": {
            "string": "StringField",
            "text": "TextAreaField",
            "integer": "IntegerField",
            "float": "FloatField",
            "boolean": "BooleanField",
            "datetime": "DateTimeField",
            "date": "DateField"
        },
        "default_validators": {
            "required": "DataRequired()",
            "email": "Email()"
        },
        "meta": {}
    },
    "arguments": {
        "default_rename": false,
        "only_model": false,
        "only_form": false,
        "classic_sqlalchemy": false,
        "tab": false,
        "translate_labels": null,
        "label_original_language": "en",
        "log_mode": false,
        "submit": "Send"
    }
}

Поддерживаемые языки для перевода

Пакет поддерживает перевод labels форм на множество языков через Google Translate. Полный список поддерживаемых языков доступен в модуле constants.py.

Примеры кодов языков:

  • en - английский

  • ru - русский

  • es - испанский

  • fr - французский

  • de - немецкий

  • zh-cn - китайский (упрощенный)

  • ja - японский

Пример выходного файла

Для таблицы users с колонками id, username, email, created_at:

# Модель SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

db = SQLAlchemy()

class Users(db.Model):
    __tablename__ = 'users'
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, nullable=False)
    email = db.Column(db.String, nullable=False)

    def __repr__(self):
        return f'<Users {self.id}>'


# Форма WTForms
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, IntegerField, FloatField, BooleanField, DateField, DateTimeField, SelectField, SubmitField
from wtforms.validators import DataRequired, Email, Length, NumberRange

class UsersForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired(), Email()])
    submit = SubmitField("Отправить")

Зависимости

  • sqlalchemy - для работы с базами данных

  • deep-translator - для перевода labels

  • tab4 - для форматирования кода

  • python-dotenv - для загрузки переменных окружения

Поддерживаемые СУБД

Пакет работает с любыми СУБД, поддерживаемыми SQLAlchemy:

  • SQLite

  • PostgreSQL

  • MySQL

  • Oracle

  • Microsoft SQL Server

  • и другие

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

db_model_generator-1.2.1.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

db_model_generator-1.2.1-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file db_model_generator-1.2.1.tar.gz.

File metadata

  • Download URL: db_model_generator-1.2.1.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for db_model_generator-1.2.1.tar.gz
Algorithm Hash digest
SHA256 6523d333c7b4846bbb6fc57ece3de3e898bb07c3408ea0767a5d44a3b7869562
MD5 73483c2f13f851528b3cfd3c0a89bc96
BLAKE2b-256 85fdd7675e20a11512693bed063e57210645630d46c0cd47014d86d959a5f694

See more details on using hashes here.

File details

Details for the file db_model_generator-1.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for db_model_generator-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 70f7d761764c15bb8f6d353530e0dd368af22aee916ebec9bf6cc499d6544651
MD5 c290236c3f70ce3ab17aecd6dd3cc1e0
BLAKE2b-256 06ca1fd2f184487bb1881b3d0a893b9ff2d2e3a5b6d46a267546bb709fb3c84e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page