Latest posts on помогите выбарть ORM? topichttps://python.su/forum/topic/2559/2008-09-02T23:07:08+03:00Общий :: Базы данных :: помогите выбарть ORM?
2008-09-02T23:07:08+03:00slav0nic16531из малоизвестных есть <a href="http://autumn-orm.org/">http://autumn-orm.org/</a> вроде ничего, похож на джанговский ORM + легковесный
Общий :: Базы данных :: помогите выбарть ORM?
2008-09-02T21:59:55+03:00Андрей Светлов16526Начнем с описания объекта.<br/><br/>В SQLObject нужно наследоваться от базового класса, внутри него создавая определения колонок и отношений. <br/>В SQLAlchemy используется разделение: обычный класс, к которому посредством маппера сопостовляется таблица базы данных и определяются отношения. NB: мапперов может быть много для разных целей, и это удобно. Например, “легкий” для отчетов и “тяжеловесный” для внесения изменений. Дополнительная выгода - меньше “магических” атрибутов класса, которые могут вызвать непонятные конфликты. Больше возможностей для настройки.<br/>Свой конструктор, наконец, в котором можно делать необходимые операции для создания НОВОГО объекта, и который НЕ ВЫЗЫВАЕТСЯ при зачитывании из БД.<br/>Описание таблицы очень похоже на CREATE STATEMENT, а mapper проецирует таблицу на пользовательский объект.<br/><br/>Отношения. Они не исчерпываются понятиями “один-к-одному”, “один-ко-многим”, “многие-ко-многим”. В алхимии для классического примера “пользователь-почтовые адреса” можно задать отношение, берущее адрес по порядковому номеру (list-like). А можно и по имени почтового ящика (dict-like). Или вообще задать свой класс для коллекции. Много чего можно, при этом отношения выглядят как привычные контейнеры.<br/><br/>Сессии-запросы.<br/>В SQLObject делаем настраиваем ГЛОБАЛЬНОЕ подключение к базе и делаем Person.select(…)<br/>В алхимии создаем сессию, подключаем ее к БД (существует множество способов, равно как и типов сессий)<br/>Потом у сессии запрашиваем query для нашего класса, и через него строим запрос. Язык запросов очень мощный и гибкий, о нем чуть позже.<br/>Все объекты, полученные через сессию или созданные для нее, запоминаются. Все изменения запоминаются опять же. Когда приходит пора записать - один раз записываем изменения. Плюс очень мощная обработка транзакций (в рамках той же сессии, естественно). Транзакции на уровне ORM и на уровне DB.<br/><br/>Язык запросов. На нижнем уровне повторяет SQL, позволяя писать SELECT/UPDATE значительно более простым способом, чем “работой с типом str”. Когда запросы идут от session.query - переходим на уровень выше. Из ORM можно спросить практически все, что позволяет SQL - оставаясь при этом в объектной модели. Главное - правильно мапперы настроить :)<br/><br/>Наследование, создание новых типов колонок, connection pooling, различные способы внесения собственных hooks и прочее - присутствует, и арсенал очень богат. Но, похоже, это не тема для “вступительной статьи”.<br/><br/><br/>Я описывал сильные стороны алхимии, но если не требуется - легко можно редуцировать. Выйдет не сложнее, чем в SQLObject. Tutuorial для алхимии очень простой. Сила проекта - в правильно выбраных уровнях абстракции и возможности осуществить тонкую настройку практически в любом необходимом месте. Сначала все это не требуется (и даже не нужно знать, что такие возможности существуют). Но очень приятно, что для возникающих проблем уже есть решение. Приходилось упираться в ограничения собственного проекта, не позволяющего без существенной переделки сделать “то-то и это”. Но в ограничения алхимии упирался очень редко, и в следующей версии они снимались.<br/><br/>P.S. Есть проект Elixir, напоминающий подход SQLObject, но базирующийся на SQLAlchemy. Может быть заинтересует, но я на него давно не смотрел.<br/><br/>P.P.S. Так получилось, что SQLAlchemy начал использовать еще в бородатой 0.1 версии. И наблюдаю за бурным развитием проекта. Сейчас уже далеко не то, что тогда, и разработчики идут правильной дорогой. Рад за них. При всей сложности задачи решается она очень хорошо, оставляя конкурентов далеко за бортом.<br/><br/>А, кстати, почему SQLObject показался предпочтительней с точки зрения начинающего, как вы себя сами отрекомендовали?
Общий :: Базы данных :: помогите выбарть ORM?
2008-09-02T20:54:11+03:00Ferroman16525<a href="http://mail.python.org/pipermail/python-list/2006-August/400812.html">Хорошо написано почему</a>
Общий :: Базы данных :: помогите выбарть ORM?
2008-09-02T19:07:49+03:00qman16518<blockquote><em>Андрей Светлов</em><br/>SQLAlchemy.<br/>Остальные, ИМХО, нервно курят в сторонке</blockquote>Уважаемый Андрей, просветите чайника чем SQLObject уступает SQLAlchemy?<br/>P.S. как чайник попробовал то и другое пока пробую SQLObject ….
Общий :: Базы данных :: помогите выбарть ORM?
2008-09-02T12:59:34+03:00Андрей Светлов16480SQLAlchemy.<br/>Остальные, ИМХО, нервно курят в сторонке
Общий :: Базы данных :: помогите выбарть ORM?
2008-09-02T10:11:46+03:00axe16476в настоящее время немного посмотрел storm, мельком видел SQLAlchemy.<br/><br/>естественно, хочется такую ORM, чтоб работала со всеми популярными БД, а смена БД ограничивалась изменением одной строчки кода;<br/>чтоб ORM имела практически неограниченную свободу в составлении запросов и выполняла их мгновенно.<br/><br/>понимаю, что такого не бывает. :)<br/><br/>какими ORM вы пользуетесь?