Каковы преимущества использования эликсира
... против декларативной 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 является избыточным для большинства проектов малого и среднего размера (на мой взгляд, конечно).