Hi, I am working on defining my mapping with SQLAlchemy and I am pretty much done except one thing. I have a 'resource' object and an association table 'relation' with several properties and a relationship between 2 resources. What I have been trying to do almost successfully so far, is to provide on the resource object 2 properties: parent and children to traverse the tree stored by the association table. A relation between 2 properties only last for a while, so there is a start and end date. Only one resource can be the parent of another resource at a time.
My problem is that if I expire one relation and create a new one, the parent property is not refreshed. I am thinking maybe there an issue with the primaryjoin for the parent property of resource. Here is some code: resource_table = model.tables['resource'] relation_table = model.tables['resource_relation'] mapper(Resource, resource_table,properties = {'type' : relation(ResourceType,lazy = False), 'groups' : relation(Group, secondary = model.tables['resource_group'], backref = 'resources'), 'parent' : relation(Relation, uselist=False, primaryjoin = and_(relation_table.c.res_id == resource_table.c.res_id, relation_table.c.end_date > func.now())), 'children' : relation(Relation, primaryjoin = and_(relation_table.c.parent_id == resource_table.c.res_id, relation_table.c.end_date > func.now()))}) mapper(Relation, relation_table, properties = {'resource' : relation(Resource, primaryjoin = (relation_table.c.res_id == resource_table.c.res_id)), 'parent' : relation(Resource, primaryjoin = (relation_table.c.parent_id == resource_table.c.res_id))}) oldrelation = resource.parent oldrelation.end_date = datetime.today() relation = self.createRelation(parent, resource) # Here the relation object has not replaced oldrelation in the resource object Hi, I am working on defining my mapping with SQLAlchemy and I am pretty much done except one thing. I have a 'resource' object and an association table 'relation' with several properties and a relationship between 2 resources. What I have been trying to do almost successfully so far, is to provide on the resource object 2 properties: parent and children to traverse the tree stored by the association table. A relation between 2 properties only last for a while, so there is a start and end date. Only one resource can be the parent of another resource at a time. My problem is that if I expire one relation and create a new one, the parent property is not refreshed. I am thinking maybe there an issue with the primaryjoin for the parent property of resource. Here is some code: resource_table = model.tables['resource'] relation_table = model.tables['resource_relation'] mapper(Resource, resource_table,properties = {'type' : relation(ResourceType,lazy = False), 'groups' : relation(Group, secondary = model.tables['resource_group'], backref = 'resources'), 'parent' : relation(Relation, uselist=False, primaryjoin = and_(relation_table.c.res_id == resource_table.c.res_id, relation_table.c.end_date > func.now())), 'children' : relation(Relation, primaryjoin = and_(relation_table.c.parent_id == resource_table.c.res_id, relation_table.c.end_date > func.now()))}) mapper(Relation, relation_table, properties = {'resource' : relation(Resource, primaryjoin = (relation_table.c.res_id == resource_table.c.res_id)), 'parent' : relation(Resource, primaryjoin = (relation_table.c.parent_id == resource_table.c.res_id))}) oldrelation = resource.parent oldrelation.end_date = datetime.today() relation = self.createRelation(parent, resource) # Here the relation object has not replaced oldrelation in the resource object Any idea ? Thanks, Richard Lopes -- 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.