Python 3 中的 SQLAlchemy ER 图

问题描述 投票:0回答:4

有谁知道如何在 python 3 中从 SQLAlchemy 模型制作 ER 图。我找到了 sqlalchemy_schemadisplay,它是 python 2,因为 pydot 和 ERAlchemy 也只是 python 2。

python python-3.x sqlalchemy entity-relationship
4个回答
24
投票

你可以尝试炼金术

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import pandas as pd
from eralchemy import render_er

from sqlalchemy import (MetaData, Table, Column)    
metadata = MetaData()

# create your own model ....
users = Table('users', metadata,
    Column('user_id', Integer(), primary_key=True),
    Column('username', String(15), nullable=False, unique=True),
)    
orders = Table('orders', metadata,
    Column('order_id', Integer()),
    Column('user_id', ForeignKey('users.user_id')),
)
# add your own table ....

# Show ER model from here
filename = 'mymodel.png'
render_er(metadata, filename)
imgplot = plt.imshow(mpimg.imread(filename))
plt.rcParams["figure.figsize"] = (15,10)
plt.show()

然后显示模型。

我使用的模块是:

  Software  
  Version  

Python      
3.4.5 64bit

IPython     
5.1.0      

OS          
Windows 10 

sqlalchemy  
1.1.5      

eralchemy   
1.1.0      

matplotlib  
2.0.0      


17
投票

正如之前的答案中提到的,sqlalchemy_schemadisplay是一个非常简单的工具。以下是基本的使用方法:

from sqlalchemy_schemadisplay import create_schema_graph
from sqlalchemy import MetaData

graph = create_schema_graph(metadata=MetaData('postgres://user:pwd@host/database'))
graph.write_png('my_erd.png')

2
投票

SQLAlchemy_SchemaDisplay 也适合我。

在 Windows 上,我通过 pip 安装了 Graphviz 和这些要求:

  • pydot
  • sqlalchemy
  • sqlalchemy_schemadisplay
  • 图形可视化

然后我将 Grapviz 二进制 (bin) 文件夹添加到路径中,并运行示例中的代码 https://github.com/sqlalchemy/sqlalchemy/wiki/SchemaDisplay


0
投票

我推荐sqlalchemy_data_model_visualizer,它更现代,通过graphviz输出svg:

  1. 在您的系统上安装 graphviz(例如 Ubuntu 上的
    apt install graphviz
  2. pip install sqlalchemy_data_model_visualizer
  3. 创建一个脚本,在其中导入模型并渲染 svg:
from yourapp.yourdb import Model1, Model2

models = [Model1, Model2]
generate_data_model_diagram(models, "diagram")

这应该会生成

diagram.svg

© www.soinside.com 2019 - 2024. All rights reserved.