Package: dmsa
# Data Models SQLAlchemy[![Circle CI](https://circleci.com/gh/chop-dbhi/data-models-sqlalchemy/tree/master.svg?style=svg)](https://circleci.com/gh/chop-dbhi/data-models-sqlalchemy/tree/master) [![Coverage Status](https://coveralls.io/repos/chop-dbhi/data-models-sqlalchemy/badge.svg?branch=master&service=github)](https://coveralls.io/github/chop-dbhi/data-models-sqlalchemy?branch=master)SQLAlchemy models and DDL and ERD generation for [chop-dbhi/data-models-service](https://github.com/chop-dbhi/data-models-service) style JSON endpoints.Web service available at http://dmsa.a0b.io/## SQLAlchemy ModelsIn your shell, hopefully within a virtualenv:```shpip install dmsa```In python:```pythonfrom sqlalchemy import MetaDatafrom dmsa import make_model_from_servicemetadata = MetaData()metadata = make_model_from_service('omop', '5.0.0','http://data-models.origins.link/',metadata)for tbl in metadata.sorted_tables:print tbl.name```These models are dynamically generated at runtime from JSON endpoints provided by chop-dbhi/data-models-service, which reads data stored in chop-dbhi/data-models. Any data model stored there can be converted into SQLAlchemy models. At the time of writing, the following are available.CAVEAT: The models are currently "Classical"-style and therefore un-mapped. See more information [here](https://github.com/chop-dbhi/data-models-sqlalchemy/issues/22).- i2b2- 1.7.0- i2b2 for PEDSnet- 2.0.1- OMOP- 4.0.0- 5.0.0- PCORnet- 1.0.0- 2.0.0- 3.0.0- PEDSnet- 1.0.0- 2.0.0- 2.1.0- 2.2.0## DDL and ERD GenerationUse of the included Dockerfile is highly recommended to avoid installing DBMS and graphing specific system requirements.The following DBMS dialects are supported when generating DDL:- PostgreSQL- MySQL- MS SQL Server- Oracle### With Docker:Retrieve the image:```shdocker pull dbhi/data-models-sqlalchemy```Usage Message:```shdocker run --rm dbhi/data-models-sqlalchemy dmsa -h```Generate OMOP V5 creation DDL for Oracle:```shdocker run --rm dbhi/data-models-sqlalchemy dmsa ddl -tci omop 5.0.0 oracle```Generate OMOP V5 drop DDL for Oracle:```shdocker run --rm dbhi/data-models-sqlalchemy dmsa ddl -tci --drop omop 5.0.0 oracle```Generate OMOP V5 data deletion DML for Oracle:```shdocker run --rm dbhi/data-models-sqlalchemy dmsa ddl --delete-data omop 5.0.0 oracle```Generate i2b2 PEDSnet V2 ERD (the image will land at `./erd/i2b2_pedsnet_2.0.0_erd.png`):```shdocker run --rm -v $(pwd)/erd:/erd dbhi/data-models-sqlalchemy dmsa erd -o /erd/i2b2_pedsnet_2.0.0_erd.png i2b2_pedsnet 2.0.0```The `graphviz` graphing package supports a number of other output formats, which are interpreted from the passed extension.### Without Docker:Install the system requirements (see Dockerfile for details):- Python 2.7- `graphviz` for ERD generation- Oracle `instantclient-basic` and `-sdk` and `libaio1` for Oracle DDL generation- `libpq-dev` for PostgreSQL DDL generation- `unixodbc-dev` for MS SQL Server DDL generationInstall the python requirements, hopefully within a virtualenv (see Dockerfile for details):```shpip install cx-Oracle            # for Oracle DDL generationpip install psycopg2             # for PostgreSQL DDL generationpip install PyMySQL              # for MySQL DDL generationpip install pyodbc               # for MS SQL Server DDL generation```Install the data-models-sqlalchemy python package:```shpip install dmsa```Usage Message:```shdmsa -h```Generate OMOP V5 creation DDL for Oracle:```shdmsa ddl -tci omop 5.0.0 oracle```Generate OMOP V5 drop DDL for Oracle:```shdmsa ddl -tci --drop omop 5.0.0 oracle```Generate OMOP V5 data deletion DML for Oracle:```shdmsa ddl --delete-data omop 5.0.0 oracle```Generate i2b2 PEDSnet V2 ERD (the image will land at `./erd/i2b2_pedsnet_2.0.0_erd.png`):```shmkdir -p erddmsa erd -o ./erd/i2b2_pedsnet_2.0.0_erd.png i2b2_pedsnet 2.0.0```## Web ServiceThe web service uses a [Gunicorn](http://gunicorn.org/) server in the Docker container and the Flask debug server locally. It exposes the following endpoints:- Creation DDL at `/<model>/<version>/ddl/<dialect>/`- Creation DDL for only `table`, `constraint`, or `index` elements at `/<model>/<version>/ddl/<dialect>/<elements>`- Drop DDL at `/<model>/<version>/drop/<dialect>/`- Drop DDL for only `table`, `constraint`, or `index` elements at `/<model>/<version>/drop/<dialect>/<elements>`- Data deletion DML at `/<model>/<version>/delete/<dialect>/`- ERDs at `/<model>/<version>/erd/`- Oracle logging scripts at `/<model>/<version>/logging/oracle/`- Oracle logging scripts for only `table` or `index` elements at `/<model>/<version>/logging/oracle/<elements>/`- Oracle nologging scripts at `/<model>/<version>/nologging/oracle/`- Oracle nologging scripts for only `table` or `index` elements at `/<model>/<version>/logging/oracle/<elements>/`### With Docker:Usage:```shdocker run dbhi/data-models-sqlalchemy gunicorn -h```Run:```shdocker run dbhi/data-models-sqlalchemy  # Uses Dockerfile defaults of 0.0.0.0:80```### Without Docker:Install Flask:```shpip install Flask```Usage Message:```shdmsa -h```Run:```shdmsa serve                              # Uses Flask defaults of 127.0.0.1:5000```