sqlalchemy的自动模型代码生成器
sqlacodegen的Python项目详细描述
这是一个工具,它读取现有数据库的结构并生成适当的 sqlalchemy模型代码,尽可能使用声明式样式。
这个工具是作为sqlautocode的替代品编写的,它有几个问题 (包括但不限于与python 3和最新sqlalchemy版本不兼容)。
功能
- 支持SQLAlchemy 0.8.x-1.3.x
- 生成几乎像是手写的声明性代码
- 生成符合PEP 8的代码
- 准确确定关系,包括多对多、一对一
- 自动检测联接表继承
- 出色的测试覆盖率
使用说明
安装
要安装,请执行以下操作:
pip install sqlacodegen
示例用法
至少,您必须给sqlacodegen一个数据库url。url直接传递给 sqlalchemy的create_engine()方法,请参考SQLAlchemy’s documentation 关于如何构造正确url的说明。
示例:
sqlacodegen postgresql:///some_local_db sqlacodegen mysql+oursql://user:password@localhost/dbname sqlacodegen sqlite:///database.db
查看选项的完整列表:
sqlacodegen --help
为什么它有时生成类,有时生成表?
除非使用--noclasses选项,否则sqlacodegen将尝试生成声明性模型类 从每张桌子上。有两种情况下会生成Table:
- 表没有主键约束(对于每个模型类,sqlalchemy都需要主键约束)
- 该表是其他两个表之间的关联表(有关详细信息,请参见下文)
模型类命名逻辑
表名(假定为英语)使用 “屈折”库。然后,在将下一个字母转换为大写字母时删除每个下划线 案例。例如,sales_invoices变成SalesInvoice。
关系检测逻辑
关系是根据现有的外键约束来检测的:
- {STR 1 }多对多< <强> >:发现两个表 之间存在关联表
如果表满足以下所有条件,则它被视为关联表:
- 只有两个外键约束
- 它的所有列都包含在上述约束中
关系命名逻辑
关系通常基于相反的类名命名。例如,如果Employee 类有一个名为employer的列,该列有一个到Company.id的外键,关系 名为company。
但是,对于单列多对一和一对一关系的一个特殊情况是 列的名称类似于employer_id。然后,由于这个关系被命名为employer。 _id后缀。
如果将使用同一名称创建多个关系,则将附加后一个关系 数字后缀,从1开始。