[![PyPI Version](https://img.shields.io/pypi/v/eralchemy2.svg)](
https://pypi.org/project/eralchemy2/)
[![PyPI Downloads](https://img.shields.io/pypi/dm/eralchemy2.svg)](
https://pypi.org/project/eralchemy2/)
![Github Actions](https://github.com/maurerle/eralchemy2/actions/workflows/python-app.yml/badge.svg)
# Entity relation diagrams generator
eralchemy2 generates Entity Relation (ER) diagram (like the one below) from databases or from SQLAlchemy models.
Works with SQLAlchemy < 1.4 but also with versions greater than 1.4
## Example
![Example for a graph](https://raw.githubusercontent.com/maurerle/eralchemy2/main/newsmeme.svg?raw=true "Example for NewsMeme")
[Example for NewsMeme](https://bitbucket.org/danjac/newsmeme)
## Quick Start
### Install
To install eralchemy2, just do:
$ pip install eralchemy2
`eralchemy2` requires [GraphViz](http://www.graphviz.org/download) to generate the graphs and Python. Both are available for Windows, Mac and Linux.
For Debian based systems, run:
$ apt install graphviz libgraphviz-dev
before installing eralchemy2.
### Install using conda
There is also a packaged version in conda-forge, which directly installs the dependencies:
$ conda install -c conda-forge eralchemy2
### Usage from Command Line
#### From a database
$ eralchemy2 -i sqlite:///relative/path/to/db.db -o erd_from_sqlite.pdf
The database is specified as a [SQLAlchemy](https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls)
database url.
#### From a markdown file.
$ curl 'https://raw.githubusercontent.com/maurerle/eralchemy2/main/example/newsmeme.er' > markdown_file.er
$ eralchemy2 -i 'markdown_file.er' -o erd_from_markdown_file.pdf
#### From a Postgresql DB to a markdown file excluding tables named `temp` and `audit`
$ eralchemy2 -i 'postgresql+psycopg2://username:password@hostname:5432/databasename' -o filtered.er --exclude-tables temp audit
#### From a Postgresql DB to a markdown file excluding columns named `created_at` and `updated_at` from all tables
$ eralchemy2 -i 'postgresql+psycopg2://username:password@hostname:5432/databasename' -o filtered.er --exclude-columns created_at updated_at
#### From a Postgresql DB to a markdown file for the schemas `schema1` and `schema2`
$ eralchemy2 -i 'postgresql+psycopg2://username:password@hostname:5432/databasename' -s "schema1, schema2"
#### Specify Output Mode
$ eralchemy2 -i 'markdown_file.er' -o erd_from_markdown_file.md -m mermaid_er
### Usage from Python
```python
from eralchemy2 import render_er
## Draw from SQLAlchemy base
render_er(Base, 'erd_from_sqlalchemy.png')
## Draw from database
render_er("sqlite:///relative/path/to/db.db", 'erd_from_sqlite.png')
```
## Architecture
![Architecture schema](https://raw.githubusercontent.com/maurerle/eralchemy2/main/eralchemy_architecture.png?raw=true "Architecture schema")
Thanks to it's modular architecture, it can be connected to other ORMs/ODMs/OGMs/O*Ms.
## Contribute
Every feedback is welcome on the [GitHub issues](https://github.com/maurerle/eralchemy2/issues).
### Development
Install the development dependencies using
$ pip install -e .[ci,dev]
Make sure to run the pre-commit to fix formatting
$ pre-commit run --all
All tested PR are welcome.
## Running tests
This project uses the pytest test suite.
To run the tests, use : `$ pytest` or `$ tox`.
Some tests require having a local PostgreSQL database with a schema named test in a database
named test all owned by a user named eralchemy with a password of eralchemy.
If docker compose is available, one can use `docker compose up -d` for this purpose.
You can deselct the tests which require a PostgreSQL database using:
$ pytest -m "not external_db"
## Publishing a release
$ rm -r dist && python -m build && python3 -m twine upload --repository pypi dist/*
## Notes
eralchemy2 is a fork of its predecessor [ERAlchemy](https://github.com/Alexis-benoist/eralchemy) by @Alexis-benoist, which is not maintained anymore and does not work with SQLAlchemy > 1.4.
If it is maintained again, I'd like to push the integrated changes upstream.
ERAlchemy was inspired by [erd](https://github.com/BurntSushi/erd), though it is able to render the ER diagram directly
from the database and not just only from the `ER` markup language.
Released under an Apache License 2.0
Initial Creator: Alexis Benoist [Alexis_Benoist](https://github.com/Alexis-benoist)
Raw data
{
"_id": null,
"home_page": null,
"name": "eralchemy2",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "sql, ORM, relational databases, ER diagram, render",
"author": null,
"author_email": "Florian Maurer <fmaurer@disroot.org>",
"download_url": "https://files.pythonhosted.org/packages/6d/84/d43709501e867d00448ce98db3ea2e02d67b71813e1587f9aa94d338fc24/eralchemy2-1.4.1.tar.gz",
"platform": null,
"description": "\n[![PyPI Version](https://img.shields.io/pypi/v/eralchemy2.svg)](\nhttps://pypi.org/project/eralchemy2/)\n[![PyPI Downloads](https://img.shields.io/pypi/dm/eralchemy2.svg)](\nhttps://pypi.org/project/eralchemy2/)\n![Github Actions](https://github.com/maurerle/eralchemy2/actions/workflows/python-app.yml/badge.svg)\n\n\n# Entity relation diagrams generator\n\neralchemy2 generates Entity Relation (ER) diagram (like the one below) from databases or from SQLAlchemy models.\nWorks with SQLAlchemy < 1.4 but also with versions greater than 1.4\n\n## Example\n\n![Example for a graph](https://raw.githubusercontent.com/maurerle/eralchemy2/main/newsmeme.svg?raw=true \"Example for NewsMeme\")\n\n[Example for NewsMeme](https://bitbucket.org/danjac/newsmeme)\n\n## Quick Start\n\n### Install\nTo install eralchemy2, just do:\n\n $ pip install eralchemy2\n\n`eralchemy2` requires [GraphViz](http://www.graphviz.org/download) to generate the graphs and Python. Both are available for Windows, Mac and Linux.\n\nFor Debian based systems, run:\n\n $ apt install graphviz libgraphviz-dev\n\nbefore installing eralchemy2.\n\n### Install using conda\n\nThere is also a packaged version in conda-forge, which directly installs the dependencies:\n\n $ conda install -c conda-forge eralchemy2\n\n### Usage from Command Line\n\n#### From a database\n\n $ eralchemy2 -i sqlite:///relative/path/to/db.db -o erd_from_sqlite.pdf\n\nThe database is specified as a [SQLAlchemy](https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls)\ndatabase url.\n\n#### From a markdown file.\n\n $ curl 'https://raw.githubusercontent.com/maurerle/eralchemy2/main/example/newsmeme.er' > markdown_file.er\n $ eralchemy2 -i 'markdown_file.er' -o erd_from_markdown_file.pdf\n\n#### From a Postgresql DB to a markdown file excluding tables named `temp` and `audit`\n\n $ eralchemy2 -i 'postgresql+psycopg2://username:password@hostname:5432/databasename' -o filtered.er --exclude-tables temp audit\n\n#### From a Postgresql DB to a markdown file excluding columns named `created_at` and `updated_at` from all tables\n\n $ eralchemy2 -i 'postgresql+psycopg2://username:password@hostname:5432/databasename' -o filtered.er --exclude-columns created_at updated_at\n\n#### From a Postgresql DB to a markdown file for the schemas `schema1` and `schema2`\n\n $ eralchemy2 -i 'postgresql+psycopg2://username:password@hostname:5432/databasename' -s \"schema1, schema2\"\n\n#### Specify Output Mode\n\n $ eralchemy2 -i 'markdown_file.er' -o erd_from_markdown_file.md -m mermaid_er\n\n### Usage from Python\n\n```python\nfrom eralchemy2 import render_er\n## Draw from SQLAlchemy base\nrender_er(Base, 'erd_from_sqlalchemy.png')\n\n## Draw from database\nrender_er(\"sqlite:///relative/path/to/db.db\", 'erd_from_sqlite.png')\n```\n\n## Architecture\n![Architecture schema](https://raw.githubusercontent.com/maurerle/eralchemy2/main/eralchemy_architecture.png?raw=true \"Architecture schema\")\n\nThanks to it's modular architecture, it can be connected to other ORMs/ODMs/OGMs/O*Ms.\n\n## Contribute\n\nEvery feedback is welcome on the [GitHub issues](https://github.com/maurerle/eralchemy2/issues).\n\n### Development\n\nInstall the development dependencies using\n\n $ pip install -e .[ci,dev]\n\nMake sure to run the pre-commit to fix formatting\n\n $ pre-commit run --all\n\nAll tested PR are welcome.\n\n## Running tests\n\nThis project uses the pytest test suite.\nTo run the tests, use : `$ pytest` or `$ tox`.\n\nSome tests require having a local PostgreSQL database with a schema named test in a database\nnamed test all owned by a user named eralchemy with a password of eralchemy.\nIf docker compose is available, one can use `docker compose up -d` for this purpose.\nYou can deselct the tests which require a PostgreSQL database using:\n\n $ pytest -m \"not external_db\"\n\n## Publishing a release\n\n $ rm -r dist && python -m build && python3 -m twine upload --repository pypi dist/*\n\n## Notes\n\neralchemy2 is a fork of its predecessor [ERAlchemy](https://github.com/Alexis-benoist/eralchemy) by @Alexis-benoist, which is not maintained anymore and does not work with SQLAlchemy > 1.4.\nIf it is maintained again, I'd like to push the integrated changes upstream.\n\nERAlchemy was inspired by [erd](https://github.com/BurntSushi/erd), though it is able to render the ER diagram directly\nfrom the database and not just only from the `ER` markup language.\n\nReleased under an Apache License 2.0\n\nInitial Creator: Alexis Benoist [Alexis_Benoist](https://github.com/Alexis-benoist)\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Simple entity relation (ER) diagrams generation",
"version": "1.4.1",
"project_urls": {
"homepage": "https://github.com/maurerle/eralchemy2",
"repository": "https://github.com/maurerle/eralchemy2"
},
"split_keywords": [
"sql",
" orm",
" relational databases",
" er diagram",
" render"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "29b2192f1f9b0eebd0169549e291bb9ca1b522636c48b530af655524e2a20896",
"md5": "5998e60dc2a2d9c80b2c011638b20b24",
"sha256": "be3ecd4e696172fe4b439a3010b08564c6f7c7323b9e9b4369e47da7a7b48428"
},
"downloads": -1,
"filename": "eralchemy2-1.4.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5998e60dc2a2d9c80b2c011638b20b24",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 18565,
"upload_time": "2024-05-20T09:27:35",
"upload_time_iso_8601": "2024-05-20T09:27:35.844471Z",
"url": "https://files.pythonhosted.org/packages/29/b2/192f1f9b0eebd0169549e291bb9ca1b522636c48b530af655524e2a20896/eralchemy2-1.4.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6d84d43709501e867d00448ce98db3ea2e02d67b71813e1587f9aa94d338fc24",
"md5": "00f0424874d5cffc292970d63713d8ab",
"sha256": "1c1ee49b26287a459c5c89aa3eba3d6a9d1b8e6bd245d9fbacc6b15560fc66a5"
},
"downloads": -1,
"filename": "eralchemy2-1.4.1.tar.gz",
"has_sig": false,
"md5_digest": "00f0424874d5cffc292970d63713d8ab",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 24101,
"upload_time": "2024-05-20T09:27:37",
"upload_time_iso_8601": "2024-05-20T09:27:37.414698Z",
"url": "https://files.pythonhosted.org/packages/6d/84/d43709501e867d00448ce98db3ea2e02d67b71813e1587f9aa94d338fc24/eralchemy2-1.4.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-20 09:27:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "maurerle",
"github_project": "eralchemy2",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "eralchemy2"
}