Latest posts on SQAlchemy - single table наследование topichttps://python.su/forum/topic/2705/2008-09-26T05:37:17+03:00Общий :: Базы данных :: SQAlchemy - single table наследование
2008-09-26T05:37:17+03:00PooH17344<blockquote><em>j2a</em><br/>Ситуация такая. Если у базового класса есть атрибуты, сопоставленные с колонками таблицы, то их не уберешь из детей.</blockquote>Ну мне как раз надо было убрать из родителей :) Огромное спасибо, exclude_properties - работает, хотя и не очень удобно в использовании. Еще раз спасибо, особенно за код. Жаль рейтинг не работает.
Общий :: Базы данных :: SQAlchemy - single table наследование
2008-09-25T15:45:53+03:00j2a17333Ситуация такая. Если у базового класса есть атрибуты, сопоставленные с колонками таблицы, то их не уберешь из детей.<br/><br/>Пример: <a href="http://dumpz.org/2665/">http://dumpz.org/2665/</a> В этом примере у экземпляров Structure не будет атрибута storeys_number, но у экземпляров Room будут атрибуты и storeys_number и ceiling_height, за счет того, что оба эти атрибута есть у его родителя - Bulding.<br/><br/>Собсно демонстрация:<br/><div class="code"><pre>>>> from rlt import *<br/>>>> make_engine()<br/><<< Engine(sqlite:///rlt.db)<br/>>>> create_sample_data()<br/><br/>>>> r0 = Room.query.first()<br/>>>> r0.ceiling_height<br/><<< 2.7000000000000002<br/>>>> r0.storeys_number<br/><br/>>>> s0 = Structure.query.first()<br/>>>> s0.storeys_number<br/><br/>>>> s0.ceiling_height<br/>---------------------------------------------------------------------------<br/><type 'exceptions.AttributeError'> Traceback (most recent call last)<br/><br/>/home/j2a/<ipython console> in <module>()<br/><br/><type 'exceptions.AttributeError'>: 'Structure' object has no attribute 'ceiling_height'</pre></div>
Общий :: Базы данных :: SQAlchemy - single table наследование
2008-09-25T11:41:45+03:00PooH17316Есть такая иерархия:<br/><div class="code"><pre>Объект недвижимости<br/> Земельный участок<br/> Строение<br/> Комплекс<br/> Здание<br/> Этаж<br/> Помещение</pre></div>У всех практически одинаковый набор атрибутов, поэтому хочу отмапить их всех на одну таблицу. Примерно такую:<br/><div class="code"><pre> идентификатор<br/> тип<br/> код<br/> описание<br/> владелец<br/> особые условия<br/> площадь<br/> высота потолка<br/> этажность<br/> ...</pre></div>Большинство атрибутов должно быть у всех классов. Но есть несколько атрибутов, которые должны быть только у конкретных классов внизу иерархии, например у Помещения - ‘высота потолка’, у здания - ‘этажность’. Когда я использую схему отсюда <a href="http://www.sqlalchemy.org/docs/05/mappers.html#advdatamapping_mapper_inheritance_single">Single Table Inheritance</a> то получаю атрибут ‘высота потолка’ у всех классов в иерархии.
Общий :: Базы данных :: SQAlchemy - single table наследование
2008-09-24T16:18:25+03:00j2a17297Давай так, ты изложи проблему не касаясь SQLAlchemy. Т.е. приведи модель иерархии, таблицу, как ты хочешь чтобы классы иерархии отображались в таблицу, как атрибуты соотносятся с колонками таблицы, лучше с примерами. А мы попробуем придумать, как в такой ситуации что-нибудь сделать с SQLAlchemy.<br/><br/>P.S. Очень часто бывает так, что подробно, с примерами изложив проблему, ты сам приближаешься к ответу на вопрос :) Эффект “резиновой уточки” :)
Общий :: Базы данных :: SQAlchemy - single table наследование
2008-09-24T14:13:39+03:00PooH17294Есть довольно глубокая иерархия классов, которую хочется отобразить на одну таблицу. При этом некотрые атрибуты должны мапится только у листовых классов. Немогу найти способ это сделать :( Через include_properties и exclude_properties достичь этого не получается