Skip to main content

Generate SQLModel code from SQL

Project description

sqlmodelgen

Coverage badge PyPI version

sqlmodelgen is a library to generate models for the sqlmodel library (repo, official docs).

It accepts in input the following sources:

  • direct CREATE TABLE sql statements
  • sqlite file path
  • postgres connection string

Installation

Available on PyPi, just run pip install sqlmodelgen

Code generation from postgres requires the separate postgres extension, installable with pip install sqlmodelgen[postgres]

Usage

Generating from CREATE TABLE

from sqlmodelgen import gen_code_from_sql

sql_code = '''
CREATE TABLE Hero (
	id INTEGER NOT NULL, 
	name VARCHAR NOT NULL, 
	secret_name VARCHAR NOT NULL, 
	age INTEGER, 
	PRIMARY KEY (id)
);
'''
print(gen_code_from_sql(sql_code))

generates:

from sqlmodel import SQLModel, Field

class Hero(SQLModel, table = True):
    __tablename__ = 'Hero'
    id: int = Field(primary_key=True)
    name: str
    secret_name: str
    age: int | None

Generating from SQLite

from sqlmodelgen import gen_code_from_sqlite

code = gen_code_from_sqlite('/home/my_user/my_database.sqlite')

Generating from Postgres

The separate postgres extension is required, it can be installed with pip install sqlmodelgen[postgres].

from sqlmodelgen import gen_code_from_postgres

code = gen_code_from_postgres('postgres://USER:PASSWORD@HOST:PORT/DBNAME')

Relationships

sqlmodelgen allows to build relationships by passing the argument generate_relationships=True to the functions:

  • gen_code_from_sql
  • gen_code_from_sqlite
  • gen_code_from_postgres

In such case sqlmodelgen is going to generate relationships between classes based on the foreign keys retrieved. The following example

schema = '''CREATE TABLE nations(
    id BIGSERIAL PRIMARY KEY,
    name TEXT NOT NULL
);

CREATE TABLE athletes(
    id BIGSERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    nation_id BIGSERIAL,
    FOREIGN KEY (nation_id) REFERENCES nations(id)
);'''

sqlmodel_code = gen_code_from_sql(schema, generate_relationships=True)

will generate:

from sqlmodel import SQLModel, Field, Relationship

class Nations(SQLModel, table = True):
    __tablename__ = 'nations'

    id: int | None = Field(primary_key=True)
    name: str
    athletess: list['Athletes'] = Relationship(back_populates='nation')
                                                                             
class Athletes(SQLModel, table = True):
    __tablename__ = 'athletes'

    id: int | None = Field(primary_key=True)
    name: str
    nation_id: int | None = Field(foreign_key="nations.id")
    nation: Nations | None = Relationship(back_populates='athletess')

Internal functioning

The library relies on sqloxide to parse SQL code, then generates sqlmodel classes accordingly

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

sqlmodelgen-0.0.14.tar.gz (44.2 kB view details)

Uploaded Source

Built Distribution

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

sqlmodelgen-0.0.14-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file sqlmodelgen-0.0.14.tar.gz.

File metadata

  • Download URL: sqlmodelgen-0.0.14.tar.gz
  • Upload date:
  • Size: 44.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.30

File hashes

Hashes for sqlmodelgen-0.0.14.tar.gz
Algorithm Hash digest
SHA256 094ce4e908401e679d08ecb2243519aff0e60c2e893f250a659beb7033912a92
MD5 d721aa2cfe6a5e3de6f4f7db26eae7c0
BLAKE2b-256 3e735b98c951db2b1e53630de2a2ba52103754de35518999d9d84e49c69757f5

See more details on using hashes here.

File details

Details for the file sqlmodelgen-0.0.14-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlmodelgen-0.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 81a07599f00cc0441050c91876dac71c5ca1a710d0964b8f8690614f31077c17
MD5 0062c6fa47b9b6f876219112e050b736
BLAKE2b-256 09fdf17c1e7b182b13d931e2844aa6faaf6dda01e1f90c419795db01e8d9f7d6

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