... vs 声明性 sqlalchemy ?
3 回答
我在这里列出了 elixir 与 sqlalchmey 的实际(技术)差异/优势,但我不知道我的说法是否正确,因为我对 sqlalchemy 的了解非常有限(我使用了非常小的一部分 elixir 和 sqla )。
答案在 sqla 中显示一个代码示例,在 elixir 中显示一个代码示例以显示差异,这将是非常明智的,因为在 stackoverflow 中回答了一些比较问题(例如,我认为 mako vs jinja2)
无论如何,这是我的清单,如果人们纠正我,我将不胜感激(纠正我对 sqlalchemy 的假设)
Elixir 实现了 Active Record 模式,旨在取代 ActiveMapper SQLAlchemy 扩展。(过时了:sqlalchemy 赶上了?)
黑白模型的关系很清晰(呃):OneToMany、ManyToOne、ManyToMany 和 OneToOne 比 sqla 的关系更清晰。一目了然,您可以看到模型的黑白关系。
继承比 sqlalchemys 更方便。由于您从类派生,因此它也更加明显。在 sqla 中,您必须调整 with_polymorphisme 和 polymorphic_on 属性。
继承:在 elixir 中,表、列和外键是自动创建的,但在 sqlalchemy 中不是。(这是 100% 真实的吗?)
Elixir 自动为所有表创建一个 ID 列(如果没有声明其他 primary_key)
Elixir 自动为关系创建 FK,sql 不会(?)
在 elixir 中,大多数时候,您不必在关系中指定 backref。在 sqla 中,你总是必须(?)
Elixir 有一个版本控制扩展(sql 没有?)
Elixir 有一个关联扩展,可以创建多对多关系并提供不错的 select_by_XXX 方法,其中 XXX 是“关联”类的名称。Sqla 没有这种扩展(?)
在 Elixir 中,继承关系是透明的。在 sqla 中,它不是,你必须这样做:http://www.sqlalchemy.org/docs/reference/ext/declarative.html#mixing-.. .)
You could say that Elixir has been made because SQLAlchemy is not declarative enough for some people.
From the Elixir website:
Elixir is intended to replace the ActiveMapper SQLAlchemy extension, and the TurboEntity project but does not intend to replace SQLAlchemy's core features, and instead focuses on providing a simpler syntax for defining model objects when you do not need the full expressiveness of SQLAlchemy's manual mapper definitions.
在从头开始为给定应用程序构建数据库时,我发现 Elixir 语法很有用,而且一切都是事先弄清楚的。
在遗留数据库(以及其他类似的逻辑不可变模式)上使用 SQLAlchemy 时,我遇到了最好的运气。特别有用的是插件 SQLSoup,用于只读的一次性数据提取,以准备将其迁移到其他地方。
YMMV,但 Elixir 并不是真正为适应旧模式而设计的——对于大多数中小型项目来说,SQLAlchemy 本身就显得过分了(当然在我看来)。