使用Elixir有什么好处

时间:2010-10-18 09:36:12

标签: python sqlalchemy python-elixir

... vs declarative sqlalchemy?

3 个答案:

答案 0 :(得分:5)

我对elixir与sqlalchmey的实际(技术)差异/优势有started a list here,但我不知道我的说法是否正确,因为我对sqlalchemy的了解非常有限(我使用的很小一部分) elixir和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没有(?)

  • 在灵丹妙药中,大多数情况下,您不必在关系中指定backref。在sqla中,您总是必须(?)

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

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

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

答案 1 :(得分:2)

你可以说Elixir已被制作,因为SQLAlchemy对某些人来说不够具有声明性。

来自Elixir网站:

  Elixir旨在取代   ActiveMapper SQLAlchemy扩展,和   TurboEntity项目但没有   打算取代SQLAlchemy的核心   功能,而专注于   为...提供更简单的语法   在不这样做时定义模型对象   需要充分的表现力   SQLAlchemy的手动映射器   定义

答案 2 :(得分:1)

Elixir语法是我从头开始为给定应用程序构建数据库时发现有用的东西,所有事情都事先弄明白了。

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

YMMV但是Elixir并不是真的适应旧的模式 - 而SQLAlchemy本身对于大多数中小型项目来说都是过度的(当然我认为)。