7

... vs 声明性 sqlalchemy ?

4

3 回答 3

5

我在这里列出了 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-.. .)

于 2010-10-20T11:59:39.403 回答
2

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.

于 2010-10-18T20:41:38.520 回答
1

在从头开始为给定应用程序构建数据库时,我发现 Elixir 语法很有用,而且一切都是事先弄清楚的。

在遗留数据库(以及其他类似的逻辑不可变模式)上使用 SQLAlchemy 时,我遇到了最好的运气。特别有用的是插件 SQLSoup,用于只读的一次性数据提取,以准备将其迁移到其他地方。

YMMV,但 Elixir 并不是真正为适应旧模式而设计的——对于大多数中小型项目来说,SQLAlchemy 本身就显得过分了(当然在我看来)。

于 2010-10-20T05:56:09.347 回答