从现有 MySQL 数据库逆向工程 SQLAlchemy 声明类定义?

2021-12-30 00:00:00 python sqlalchemy mysql

我有一个包含大约 50 个表的预先存在的 mysql 数据库.

I have a pre-existing mysql database containing around 50 tables.

而不是手动编写声明式风格的 SqlAlchemy 类 (如此处所示)对于每个表,是否有一个工具/脚本/命令我可以针对将生成一个 python 类的 mysql 数据库运行在数据库中每个表的声明样式中?

Rather than hand code a declarative style SqlAlchemy class (as shown here) for each table, is there a tool/script/command I can run against the mysql database that will generate a python class in the declarative style for each table in the database?

仅以一张表为例(理想情况下为所有 50 个生成)如下:

To take just one table as an example (would generate for all 50 ideally) as follows:

+---------+--------------------+
| dept_no | dept_name          |
+---------+--------------------+
| d009    | Customer Service   |
| d005    | Development        |
| d002    | Finance            |
| d003    | Human Resources    |
| d001    | Marketing          |
| d004    | Production         |
| d006    | Quality Management |
| d008    | Research           |
| d007    | Sales              |
+---------+--------------------+

是否有工具/脚本/命令可以生成包含以下内容的文本文件:

Is there a tool/script/command that can generate a text file containing something like:

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Department(Base):
   __tablename__ = 'departments'

   dept_no = Column(String(5), primary_key=True)
   dept_name = Column(String(50))

   def __init__(self, dept_no, dept_name):
       self.dept_no = dept_no
       self.dept_name = dept_name

   def __repr__(self):
      return "<Department('%s','%s')>" % (self.dept_no, self.dept_name)

推荐答案

使用 sqlautocode:

它是一种从现有数据库自动生成模型的灵活工具.

It is a flexible tool to autogenerate a model from an existing database.

这是一种与 SqlSoup 略有不同的方法,它允许您使用表而无需明确定义它们.另一方面,sqlalutocode 会生成实际的python 代码.

This is a slightly different approach to SqlSoup, which lets you use tables without explicitly defining them. On the other hand, sqlalutocode will generate actual python code.

相关文章