跳转到主要内容

SQLAlchemy的自动模型代码生成器

项目描述

这是一个读取现有数据库结构并尽可能使用声明性风格生成相应SQLAlchemy模型代码的工具。

此工具被编写为sqlautocode的替代品,它存在几个问题(包括但不限于与Python 3和最新SQLAlchemy版本的不兼容性)。

功能

  • 支持SQLAlchemy 0.8.x - 1.3.x

  • 生成看起来几乎像手写的声明性代码

  • 生成符合PEP 8的代码

  • 准确地确定关系,包括多对多、一对一

  • 自动检测联合表继承

  • 优秀的测试覆盖率

使用说明

安装

要安装,请

pip install sqlacodegen

示例用法

至少,您必须为sqlacodegen提供一个数据库URL。URL直接传递给SQLAlchemy的create_engine()方法,因此请参阅SQLAlchemy文档以了解如何构建正确的URL。

示例

sqlacodegen postgresql:///some_local_db
sqlacodegen mysql+oursql://user:password@localhost/dbname
sqlacodegen sqlite:///database.db

查看选项列表

sqlacodegen --help

为什么有时生成类有时生成表?

除非使用 --noclasses 选项,sqlacodegen 尝试从每个表中生成声明性模型类。有两种情况会生成 Table 而不是模型类:

  • 表没有主键约束(这是 SQLAlchemy 对每个模型类的要求)

  • 表是两个其他表之间的关联表(以下将具体说明)

模型类命名逻辑

表名(假设为英文)使用“inflect”库转换为单数形式。然后,删除每个下划线,将下一个字母转换为大写。例如,sales_invoices 变为 SalesInvoice

关系检测逻辑

关系是根据现有的外键约束检测的,如下所示

  • 多对一:表上存在外键约束

  • 一对一:与 多对一 相同,但涉及的列(们)存在唯一约束

  • 多对多:发现存在两个表之间的关联表

如果表满足以下所有条件,则被认为是关联表

  1. 恰好有两个外键约束

  2. 所有列都参与这些约束

关系命名逻辑

通常根据相反的类名命名关系。例如,如果 Employee 类有一个名为 employer 的列,该列有一个外键指向 Company.id,则该关系被命名为 company

然而,对于单列多对一和一对一关系有一个特殊情况,如果列名为 employer_id。那么由于该 _id 后缀,关系被命名为 employer

如果会创建多个具有相同名称的关系,则后续的关系将附加数字后缀,从 1 开始。

获取帮助

如果您有问题或其他问题,您可以

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分发

sqlacodegen-2.3.0.post1.tar.gz (21.0 kB 查看哈希值)

上传时间: 源代码

构建的发行版

sqlacodegen-2.3.0.post1-py2.py3-none-any.whl (13.2 kB 查看哈希值)

上传时间: Python 2 Python 3

由以下支持