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。
关系检测逻辑
关系是根据现有的外键约束检测的,如下所示
多对一:表上存在外键约束
一对一:与 多对一 相同,但涉及的列(们)存在唯一约束
多对多:发现存在两个表之间的关联表
如果表满足以下所有条件,则被认为是关联表
恰好有两个外键约束
所有列都参与这些约束
关系命名逻辑
通常根据相反的类名命名关系。例如,如果 Employee 类有一个名为 employer 的列,该列有一个外键指向 Company.id,则该关系被命名为 company。
然而,对于单列多对一和一对一关系有一个特殊情况,如果列名为 employer_id。那么由于该 _id 后缀,关系被命名为 employer。
如果会创建多个具有相同名称的关系,则后续的关系将附加数字后缀,从 1 开始。
获取帮助
如果您有问题或其他问题,您可以
在 SQLAlchemy Google 群组 上提问,或者
在 Freenode IRC 的 #sqlalchemy 频道提问
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源分发
构建的发行版
sqlacodegen-2.3.0.post1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | daf34a2557fad3dad8cc4f6d625b66ac4671cb7e9ec8319eb958b47314872a99 |
|
MD5 | c99876884488d360fa0c0bdcf71a1911 |
|
BLAKE2b-256 | dda114365d345df9d8abd898f20dc6a84df2db0fb9b03b79576e0dd678716522 |
sqlacodegen-2.3.0.post1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 674d58f54559912c2f785276b50a2f9c52ec7ec9d9aea50a118a002392cb17c3 |
|
MD5 | 913411f30ed3d5f481d2af18c8f14b2e |
|
BLAKE2b-256 | 134389ee0124f76d4e523c22eef66f3c5e6d50f3513c31144f08df7b9237af8b |