Package: ddlgenerator
Infers SQL DDL (Data Definition Language) from table data.Use at command line:$ ddlgenerator -i postgresql '[{"Name": "Alfred", "species": "wart hog", "kg": 22}]'

DROP TABLE generated_table;
CREATE TABLE generated_table (
        name VARCHAR(6) NOT NULL,
        kg INTEGER NOT NULL,
        species VARCHAR(8) NOT NULL
)
;
INSERT INTO generated_table (kg, Name, species) VALUES (22, 'Alfred', 'wart hog');Reads data from files:$ ddlgenerator postgresql mydata.yaml > mytable.sqlEnables one-line creation of tables with their data$ ddlgenerator –inserts postgresql mydata.json | psqlTo use in Python:>>> from ddlgenerator.ddlgenerator import Table
>>> table = Table([{"Name": "Alfred", "species": "wart hog", "kg": 22}])
>>> sql = table.sql('postgresql', inserts=True)Supported data formatsPure PythonYAMLJSONCSVPickleHTMLFeaturesSupports all SQL dialects supported by SQLAlchemyCoerces data into most specific data type valid on all column’s valuesTakes table name from file nameGuesses format of input data if unspecified by file extensionwith-i/--insertsflag, adds INSERT statementswith-u/--uniquesflag, surmises UNIQUE constraints from dataHandles nested data, creating child tables as neededReads HTML tables, including those embedded in noisy websitesOptions-h, --help            show this help message and exit
-k KEY, --key KEY     Field to use as primary key
-r, --reorder         Reorder fields alphabetically, ``key`` first
-u, --uniques         Include UNIQUE constraints where data is unique
-t, --text            Use variable-length TEXT columns instead of VARCHAR
-d, --drops           Include DROP TABLE statements
-i, --inserts         Include INSERT statements
--no-creates          Do not include CREATE TABLE statements
--save-metadata-to FILENAME
                      Save table definition in FILENAME for later --use-
                      saved-metadata run
--use-metadata-from FILENAME
                      Use metadata saved in FROM for table definition, do
                      not re-analyze table structure
-l LOG, --log LOG     log level (CRITICAL, FATAL, ERROR, DEBUG, INFO, WARN)Generate SQLAlchemy modelsUsesqlalchemyas the model to generate Python for defining SQLAlchemy
models:$ ddlgenerator sqlalchemy '[{"Name": "Alfred", "species": "wart hog", "kg": 22}]'

Table0 = Table('Table0', metadata,
  Column('species', Unicode(length=8), nullable=False),
  Column('kg', Integer(), nullable=False),
  Column('name', Unicode(length=6), nullable=False),
  schema=None)Generate Django modelsIf Django is installed on the path then usingdjangoas the model will run the
generated ddl through Django’sinspectdbmanagement command to produce a model
file:$ ddlgenerator django '[{"Name": "Alfred", "species": "wart hog", "kg": 22}]'

# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Remove `managed = False` lines if you wish to allow Django to create and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
#
# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'
# into your database.
from __future__ import unicode_literals

from django.db import models

class Table0(models.Model):
    species = models.CharField(max_length=8)
    kg = models.IntegerField()
    name = models.CharField(max_length=6)
    class Meta:
        managed = False
        db_table = 'Table0'Large tablesAs of now,ddlgeneratoris not well-designed for table sizes approaching
your system’s available memory.One approach to save time and memory for large tables is to break your input data into multiple
files, then runddlgeneratorwith--save-metadataagainst a small
but representative sample.  Then run with--no-createsand-use-saved-metadatato generate INSERTs from the remaining files without needing to re-determine the
column types each time.InstallingRequires Python3.From PyPI:pip3 install ddlgeneratorFrom source:git clone https://github.com/catherinedevlin/ddl-generator.git
cd ddl-generator
pip3 install .Alternativescsvkit.csvsqlpandas.read_*methodsprequelfor SQLiteCreditsMike Bayer for sqlalchemycoldfix and Mark Ransom for their StackOverflow answersAudrey Roy for cookiecutterBrandon Lorenz for Django model generationHistory0.1.0 (2014-03-22)First release on PyPI.0.1.2 (2014-07-15)data_dispensermoved to separate module0.1.3 (2014-07-16)Bugfix for long integers found after short strings0.1.4 (2014-07-25)Fixed bug: externaldata_dispenserunused by 0.1.3!0.1.5 (2014-07-25)sqlalchemypseudo-dialect added0.1.6 (2014-07-25)Generate sqlalchemy inserts0.1.7 (2014-09-14)Read via HTTPSupport HTML formatGenerate Django models0.1.7.1 (2014-09-14)Require data-dispenser 0.2.30.1.7.3 (2014-10-19)Require all formerly recommended dependencies, for simplicitySeveral bugfixes for complex number-like fields0.1.8 (2015-02-01)UNIQUE contstraints handled properly in sqlalchemy output0.1.8.2 (2015-02-05)Cleaner SQLAlchemy generation for fixtures0.1.9 (2015-02-10)README fixes from Anatoly Technonik, Mikhail PodgurskiyParse args passed togenerate(args, namespace)for non-command-line use