Skip to main content
# 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 Models

In your shell, hopefully within a virtualenv:

```sh
pip install dmsa
```

In python:

```python
from sqlalchemy import MetaData
from dmsa import make_model_from_service

metadata = 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 Generation

Use 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:

```sh
docker pull dbhi/data-models-sqlalchemy
```

Usage Message:

```sh
docker run --rm dbhi/data-models-sqlalchemy dmsa -h
```

Generate OMOP V5 creation DDL for Oracle:

```sh
docker run --rm dbhi/data-models-sqlalchemy dmsa ddl -tci omop 5.0.0 oracle
```

Generate OMOP V5 drop DDL for Oracle:

```sh
docker run --rm dbhi/data-models-sqlalchemy dmsa ddl -tci --drop omop 5.0.0 oracle
```

Generate OMOP V5 data deletion DML for Oracle:

```sh
docker 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`):

```sh
docker 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 generation

Install the python requirements, hopefully within a virtualenv (see Dockerfile for details):

```sh
pip install cx-Oracle # for Oracle DDL generation
pip install psycopg2 # for PostgreSQL DDL generation
pip install PyMySQL # for MySQL DDL generation
pip install pyodbc # for MS SQL Server DDL generation
```

Install the data-models-sqlalchemy python package:

```sh
pip install dmsa
```

Usage Message:

```sh
dmsa -h
```

Generate OMOP V5 creation DDL for Oracle:

```sh
dmsa ddl -tci omop 5.0.0 oracle
```

Generate OMOP V5 drop DDL for Oracle:

```sh
dmsa ddl -tci --drop omop 5.0.0 oracle
```

Generate OMOP V5 data deletion DML for Oracle:

```sh
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`):

```sh
mkdir -p erd
dmsa erd -o ./erd/i2b2_pedsnet_2.0.0_erd.png i2b2_pedsnet 2.0.0
```

## Web Service

The 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:

```sh
docker run dbhi/data-models-sqlalchemy gunicorn -h
```

Run:

```sh
docker run dbhi/data-models-sqlalchemy # Uses Dockerfile defaults of 0.0.0.0:80
```

### Without Docker:

Install Flask:

```sh
pip install Flask
```

Usage Message:

```sh
dmsa -h
```

Run:

```sh
dmsa serve # Uses Flask defaults of 127.0.0.1:5000
```

Metadata

Release files for dmsa 0.5.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dmsa 0.5.8
File Size Uploaded Provenance Actions
dmsa-0.5.8.tar.gz 16.1 kB Without provenance Details for dmsa-0.5.8.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for dmsa 0.5.8
File Interpreter ABI Platform Actions
dmsa-0.5.8-py2.7.egg Legacy Egg format - - Details for dmsa-0.5.8-py2.7.egg
dmsa-0.5.8-py2-none-any.whl Python 2 none any Details for dmsa-0.5.8-py2-none-any.whl

Total release size: 87.5 kB

Release files / dmsa-0.5.8.tar.gz

Download URL dmsa-0.5.8.tar.gz
Size 16.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f66ac8a7b378d0e5729ce3a3edffff7ec2d606f7e765a5418d2cb2bab408b351
BLAKE2b-256 checksum
How to use checksums
01713a5bf012d831033113a5e3b3f42ba441839bc1f5df120fadcb4e175b8abf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / dmsa-0.5.8-py2.7.egg

Download URL dmsa-0.5.8-py2.7.egg
Size 46.5 kB
Tags Egg
SHA-256 checksum
How to use checksums
940be1d3de4d511b95029ce21d7f47ae6bf10668642ecf7accc8ca1c0e89bde8
BLAKE2b-256 checksum
How to use checksums
5804b8cac86b7f120f2e89e5d88494a8f67823f5900ed693ed76e383778b28af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / dmsa-0.5.8-py2-none-any.whl

Download URL dmsa-0.5.8-py2-none-any.whl
Size 24.8 kB
Tags Python 2
SHA-256 checksum
How to use checksums
ce0d02fd91e1b8158df39c2ada2951064a96ee22f0d3e6fbc92785f0b4f2ca9a
BLAKE2b-256 checksum
How to use checksums
79a9ee5ca1ebacc78a958e303b23060f4e371179ea60b0de51941b08ed87b95f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for dmsa 0.5.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page