On Nov 15, 2010, at 10:46 AM, neurino wrote:

> Thanks for your answer first.
> 
> Root is a singleton, its class is not mapped to a table.
> 
> What I mean is I could add a table "roots" to the database with a
> sigle row and add areas a foreign key "root_id" and create a
> relationship as from subareas with parent area and get what I'm
> talking about.

sure, then you're mapping Root to a table, and having just one row.   That 
would make Root.area act exactly like a relationship() though its a little 
strange to have a row in the database just to make your application work a 
certain way (where "certain way" here is not clear).


> 
> This relationship, between root and area, as long as areas and
> subareas would come in handy for example to traverse the tree for
> extracting an xml simply, or to make recursive calculations.
> 
> Before sqlalchemy I was used to add all areas, subareas, items, parent
> attributes to classes by myself but now I'm in the situation that 80%
> of the work is done by sqlalchemy automatically and I'm not sure how
> to fill the remaining, possibly having both areas and subareas behave
> at the same way to avoid confusion (just as an example, lazy loading).
> 
> Thanks for your support
> neurino
> 
> On Nov 15, 3:49 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
>> On Nov 15, 2010, at 8:06 AM, neurino wrote:
>> 
>>> So no advice?
>> 
>>> Are relationships and backref something more than attributes I can
>>> setup with a query?
>> 
>>> Thank you for your support.
>> 
>> what's not stated clearly here is what "Root" is.  If that's not a class 
>> mapped to a table, then you'd just need to use regular Python attributes and 
>> descriptors to establish the in-python behavior you're looking for.  Seems 
>> like its essentially some kind of query object, so your query.all()/.parent 
>> = some_root approach is what you'd go with, though it would appear that Root 
>> is a singleton anyway, meaning this could be established on Area at the 
>> class level instead of assigning to each instance.
>> 
>> Its not clear what other behavior of "relationship()" would apply here, 
>> since Root has no database identity.
>> 
>> 
>> 
>> 
>> 
>>> On Nov 11, 9:45 am, neurino <neur...@gmail.com> wrote:
>>>> I have a tree structure
>> 
>>>> Root
>>>>   |
>>>>   +--Area
>>>>   |    |
>>>>   |    +--SubArea
>>>>   |    |    |
>>>>   |    |    +--Item
>>>>   |    |    |
>>>>   |    |    +--Item
>>>>   |    |
>>>>   |    +--SubArea
>>>>   |         |
>>>>   |         +--Item
>>>>   |         |
>>>>   |         +--Item
>>>>   |
>>>>   +--Area
>>>>        |
>>>>        +--SubArea
>>>>        |    |
>>>>        |    +--Item
>>>>        |    |
>>>>        |    +--Item
>>>>        |
>>>>        +--SubArea
>>>>             |
>>>>             +--Item
>>>>             |
>>>>             +--Item
>> 
>>>> The tree structure corresponds to slqalchemy db tables `areas`,
>>>> `subareas` and `items`.
>> 
>>>> Something like this:
>> 
>>>>     mapper(Area, areas_table, properties={
>>>>         'subareas': relationship(SubArea, backref='parent'),
>>>>         })
>>>>     mapper(SubArea, subareas__table, properties={
>>>>         'items': relationship(Item, backref='parent'),
>>>>         })
>>>>     mapper(Item, items_table)
>> 
>>>> so each Area instance will have a `subareas` list and each SubArea
>>>> will have a `items` list,
>> 
>>>> also I easyly get a backref `parent` from Item to parent SubArea and
>>>> from
>>>> SubArea to parent Area.
>> 
>>>> But this won't be for Root: it will not have a `areas` list in Root
>>>> nor its areas will have a parent reference to Root.
>> 
>>>> The quick-and-dirty solution is to do this in Root:
>> 
>>>>     self.areas = query(Area).all()
>>>>     for area in self.areas:
>>>>         area.parent = self
>> 
>>>> But it won't be the same thing as sqlalchemy `relationship` attributes
>>>> so:
>>>> are there alternative solutions more sqlalchemy-like?
>> 
>>>> Any tip appreciated!
>> 
>>>> Thank you for your support
>> 
>>>> Greetings
>>>> neurino
>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "sqlalchemy" group.
>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> sqlalchemy+unsubscr...@googlegroups.com.
>>> For more options, visit this group 
>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to