Skip to main content

O! My Models (omymodels) is a library to generate from SQL DDL Python Models for GinoORM.

Project description

O! My Models

badge1 badge2 badge3

O! My Models (omymodels) is a library to generate from SQL DDL Python Models for GinoORM (I hope to add several more ORMs in future) and Pydantic.

By default method create_models generate GinoORM models, to ger Pydantic models output use argument models_type='pydantic'

For example,

from omymodels import create_models


ddl = """
CREATE table user_history (
        runid                 decimal(21) not null
    ,job_id                decimal(21) not null
    ,id                    varchar(100) not null -- group_id or role_id
    ,user              varchar(100) not null
    ,status                varchar(10) not null
    ,event_time            timestamp not null default now()
    ,comment           varchar(1000) not null default 'none'
    ) ;
"""
result = create_models(ddl, models_type='pydantic')

GinoORM example. If you provide an input like:

CREATE TABLE "users" (
  "id" SERIAL PRIMARY KEY,
  "name" varchar,
  "created_at" timestamp,
  "updated_at" timestamp,
  "country_code" int,
  "default_language" int
);

CREATE TABLE "languages" (
  "id" int PRIMARY KEY,
  "code" varchar(2) NOT NULL,
  "name" varchar NOT NULL
);

and you will get output:

from gino import Gino


db = Gino()


class Users(db.Model):

    __tablename__ = 'users'

    id = db.Column(db.Integer(), autoincrement=True, primary_key=True)
    name = db.Column(db.String())
    created_at = db.Column(db.TIMESTAMP())
    updated_at = db.Column(db.TIMESTAMP())
    country_code = db.Column(db.Integer())
    default_language = db.Column(db.Integer())


class Languages(db.Model):

    __tablename__ = 'languages'

    id = db.Column(db.Integer(), primary_key=True)
    code = db.Column(db.String(2))
    name = db.Column(db.String())

How to install

pip install omymodels

How to use

From cli

omm path/to/your.ddl

# for example
omm tests/test_two_tables.sql

You can define target path where to save models with -t, –target flag:

# for example
omm tests/test_two_tables.sql -t test_path/test_models.py

If you want generate the Pydantic models - just use flag -m or –models_type=’pydantic’

omm /path/to/your.ddl -m pydantic

# or
omm /path/to/your.ddl --models_type pydantic

Small library is used for parse DDL- https://github.com/xnuinside/simple-ddl-parser.

What to do if types not supported in O! My Models and you cannot wait until PR will be approved

First of all, to parse types correct from DDL to models - they must be in types mypping, for Gino it exitst in this file:

omymodels/gino/types.py types_mapping

If you need to use fast type that not exist in mapping - just do a path before call code with types_mapping.update()

for example:

from omymodels.gino import types
from omymodels import create_models

types.types_mapping.update({'your_type_from_ddl': 'db.TypeInGino'})

ddl = "YOUR DDL with your custom your_type_from_ddl"

models = create_models(ddl)

#### And similar for Pydantic types

from omymodels.pydantic import types  types_mapping
from omymodels import create_models

types.types_mapping.update({'your_type_from_ddl': 'db.TypeInGino'})

ddl = "YOUR DDL with your custom your_type_from_ddl"

models = create_models(ddl, models_type='pydantic')

TODO in next releases

  1. Add ForeignKey generation for GinoORM Models

How to contribute

Please describe issue that you want to solve and open the PR, I will review it as soon as possible.

Any questions? Ping me in Telegram: https://t.me/xnuinside

Changelog

v0.4.0

  1. Added generation for Pydantic models from ddl

  2. Main method create_gino_models renamed to create_models

v0.3.0

  1. Generated Index for ‘index’ statement in table_args (not unique constrait as previously)

  2. Fix issue with column size as tuple (4,2)

v0.2.0

  1. Valid generating columns in models: autoincrement, default, type, arrays, unique, primary key and etc.

  2. Added creating table_args for indexes

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

omymodels-0.4.0.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

omymodels-0.4.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file omymodels-0.4.0.tar.gz.

File metadata

  • Download URL: omymodels-0.4.0.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.7 Darwin/19.6.0

File hashes

Hashes for omymodels-0.4.0.tar.gz
Algorithm Hash digest
SHA256 f4b7d071cbcf95bed15e835b4ac5d95164e13a551549e67fb8eef5e609064785
MD5 399b9a7a5bb4f2a8410640cb4de0798c
BLAKE2b-256 f4935ebbe9fbbc620f694d015896a0107ea5faa57bc145a33545e27edcfd41cd

See more details on using hashes here.

File details

Details for the file omymodels-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: omymodels-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.7 Darwin/19.6.0

File hashes

Hashes for omymodels-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bea1a553f85e43118283fa9c95154104553872aa44e8b56fdb72dab5b2908604
MD5 7decd340a877ba968f0cf723f4f89a08
BLAKE2b-256 6dd1079af8e9e85e7c11f87a60604e7706129b507e7c2e025729c4d509db0114

See more details on using hashes here.

Supported by

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