7

... vs宣言型sqlalchemy?

4

3 に答える 3

5

ここで、エリクサーと sqlalchmey の実用的な (技術的な) 違い/利点のリストを開始しましたが、私の主張が正しいかどうかはわかりません。 )。

ここでいくつかの比較の質問がstackoverflowで回答されたため、答えがsqlaのコード例とelixirの同等のものを示して違いを示すことは非常に証明的です(たとえば、makoとjinja2を考えます)

とにかく、これが私のリストです。人々が私を修正してくれれば本当にありがたいです(sqlalchemyに関する私の仮定を修正してください)

  • Elixir は Active Record パターンを実装し、ActiveMapper SQLAlchemy 拡張機能を置き換えることを目的としています。(時代遅れ:sqlalchemyが追いついた?)

  • 関係 b/w モデルは明確です: OneToMany、ManyToOne、ManyToMany、および OneToOne は、sqla の関係よりも明確です。モデルとの関係を一目で確認できます。

  • 継承は、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-.. .)

于 2010-10-20T11:59:39.403 に答える
2

Elixir が作成されたのは、SQLAlchemy が一部の人々にとって十分に宣言的でないためであると言えます。

エリクサーのウェブサイトから:

Elixir は、ActiveMapper SQLAlchemy 拡張機能と TurboEntity プロジェクトを置き換えることを目的としていますが、SQLAlchemy のコア機能を置き換えることは意図しておらず、代わりに、SQLAlchemy の手動マッパー定義の完全な表現力が必要ない場合に、モデル オブジェクトを定義するためのより単純な構文を提供することに重点を置いています。

于 2010-10-18T20:41:38.520 に答える
1

Elixir構文は、特定のアプリのデータベースを最初から構築するときに役立つものであり、すべてが事前に把握されています。

SQLAlchemyをレガシーデータベース(および他の同様にロジスティックに不変のスキーマ)で使用するとき、私は幸運に恵まれました。特に便利なのは、プラグインSQLSoupです。これは、データを他の場所に移行するための準備として、データを読み取り専用で1回だけ抽出するためのものです。

YMMVですが、Elixirは実際には古いスキーマに適応するようには設計されていません。また、SQLAlchemyは、ほとんどの中小規模のプロジェクトには行き過ぎです(もちろん私の意見では)。

于 2010-10-20T05:56:09.347 に答える