ych*_*che 5

我已经在这里列出了elixir与sqlalchmey的实际(技术)差异/优势,但我不知道我的说法是否正确,因为我对sqlalchemy的了解非常有限(我使用了一小部分长生不老药和sqla ).

答案显示,sqla中的代码示例和elixir中的等效代码显示差异是非常明显的,因为这里的一些比较问题在stackoverflow中得到了回答(例如,我认为mako vs jinja2)

无论如何,这是我的清单,如果有人纠正我,我会非常感激(纠正我对sqlalchemy的假设)

  • Elixir实现Active Record Pattern,旨在取代ActiveMapper SQLAlchemy扩展.(过时了:sqlalchemy赶上了吗?)

  • 关系b/w模型很清楚(呃):OneToMany,ManyToOne,ManyToMany和OneToOne比sqla的关系更清晰.一目了然,你可以看到你的模型与你的关系.

  • Inhertience比sqlalchemys更方便.由于您派生自类,因此它也更加明显.在sqla中,您必须调整with_polymorphisme和polymorphic_on属性.

  • Inhertience:在elixir中,自动创建表,列和外键,但不在sqlalchemy中创建.(100%是真的吗?)

  • Elixir自动为所有表创建一个ID列(如果没有声明其他primary_key)

  • Elixir自动为关系创建FK,sql没有(?)

  • 在elixir中,大多数情况下,您不必在关系中指定backref.在sqla中,你总是要(?)

  • Elixir有一个版本扩展(sql没有?)

  • Elixir有一个可关联的扩展,它创建了ManyToMany关系并提供了很好的select_by_XXX方法,其中XXX是"关联"类的名称.Sqla没有这种扩展(?)

  • 在Elixir中透明地继承关系.在sqla,它不是,你必须这样做:http://www.sqlalchemy.org/docs/reference/ext/declarative.html#mixing- ...)


Ton*_*uža 2

你可以说 Elixir 的诞生是因为 SQLAlchemy 对于某些人来说声明性不够。

来自Elixir网站:

Elixir 旨在取代 ActiveMapper SQLAlchemy 扩展和 TurboEntity 项目,但并不打算取代 SQLAlchemy 的核心功能,而是专注于在不需要 SQLAlchemy 手动映射器定义的完整表达能力时提供更简单的语法来定义模型对象。