Каковы преимущества использования эликсира

... против декларативной sqlalchemy?

3 ответа

Я начал здесь список практических (технических) отличий / преимуществ эликсира от sqlalchmey, но я не знаю, верны ли мои утверждения, потому что мои знания о sqlalchemy очень ограничены (я использую очень небольшую часть эликсира и sqla).

Было бы очень корректно, чтобы ответы показывали пример кода в sqla и эквивалент в elixir, чтобы показать различия, так как некоторые вопросы сравнения были даны здесь ответы в stackru (я думаю о mako vs jinja2, например)

Во всяком случае, вот мой список, я был бы очень признателен, если бы люди меня поправили (исправьте мои предположения по sqlalchemy)

  • Elixir реализует шаблон Active Record и предназначен для замены расширения ActiveMapper SQLAlchemy. (от: sqlalchemy догнал?)

  • Отношения ч / б моделей понятны (э): OneToMany, ManyToOne, ManyToMany и OneToOne более понятны, чем отношения sqla. С первого взгляда вы можете увидеть отношения ч / б ваших моделей.

  • Наследование более удобно, чем в sqlalchemys. Это также более заметно, так как вы получаете от классов. В sqla вам придется настроить атрибуты with_polymorphisme и polymorphic_on.

  • Наследование: в эликсире таблицы, столбцы и внешние ключи создаются автоматически, но не в sqlalchemy. (это правда на 100%?)

  • Elixir автоматически создает столбец идентификатора для всех таблиц (если не объявлен другой ключ primary_key)

  • Elixir создает FK для отношений автоматически, sql - нет (?)

  • В эликсире в большинстве случаев вам не нужно указывать обратную ссылку в ваших отношениях. В sqla вы всегда должны (?)

  • Elixir имеет расширение для версии (sql не имеет?)

  • Elixir имеет ассоциативное расширение, которое создает отношения ManyToMany и предоставляет хорошие методы select_by_XXX, где XXX - это имя "связанного" класса. У Sqla нет такого расширения (?)

  • Наследование отношений осуществляется прозрачно в эликсире. В sqla это не так, вы должны сделать это: http://www.sqlalchemy.org/docs/reference/ext/declarative.html)

Можно сказать, что Elixir был создан, потому что SQLAlchemy не достаточно декларативен для некоторых людей.

С сайта Elixir:

Elixir предназначен для замены расширения ActiveMapper SQLAlchemy и проекта TurboEntity, но не предназначен для замены основных функций SQLAlchemy, и вместо этого фокусируется на предоставлении более простого синтаксиса для определения объектов модели, когда вам не нужна полная выразительность определений сопоставления вручную в SQLAlchemy.

Синтаксис Elixir - это то, что я считаю полезным при создании базы данных для данного приложения с нуля, и все заранее продумано.

Мне больше всего повезло с SQLAlchemy при использовании его в устаревших базах данных (и в других аналогично логистически неизменяемых схемах). Особенно полезным является плагин SQLSoup для одноразового извлечения данных только для чтения при подготовке к переносу его в другое место.

YMMV, но Elixir на самом деле не предназначен для адаптации к более старым схемам - и собственно SQLAlchemy является избыточным для большинства проектов малого и среднего размера (на мой взгляд, конечно).

Другие вопросы по тегам