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 }多对1 < /强>:表上存在外键约束 {STR 1 }一对一< /强>:与^ {STR 1 }相同:$1对1 < /强>,但在涉及的列上存在唯一约束
  • {STR 1 }多对多< <强> >:发现两个表
  • 之间存在关联表

如果表满足以下所有条件,则它被视为关联表:

  1. 只有两个外键约束
  2. 它的所有列都包含在上述约束中

关系命名逻辑

关系通常基于相反的类名命名。例如,如果Employee 类有一个名为employer的列,该列有一个到Company.id的外键,关系 名为company

但是,对于单列多对一和一对一关系的一个特殊情况是 列的名称类似于employer_id。然后,由于这个关系被命名为employer_id后缀。

如果将使用同一名称创建多个关系,则将附加后一个关系 数字后缀,从1开始。

获取帮助

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java允许具有不同父类的类扩展类,而无需多重继承   java如何创建动态化的JScrollPane w/JPanel作为客户端?   java如何组织和命名包   在Java中读取属性文件   java无法解释的Android意图行为   在Java中动态执行多个BPEL文件的部署   ssl Java 6 SNI(服务器名称指示)?   java我们可以使用Robot框架自动化web和移动应用程序来执行并行执行   java for star pettern的循环   java为什么BinaryReader在线程中,从netty读取错误的数据包?   在java中将华氏度转换为摄氏度   使用Spark和java处理空值和引号编写CSV文件   Java中已排序日期到块的列表   visual studio代码VSCode Java不是linting或自动完成局部变量,而是自动完成Java快捷方式,如“sysout”