... vs declarative sqlalchemy?
答案 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本身对于大多数中小型项目来说都是过度的(当然我认为)。