2010-03-04 8 views
1

Je travaille sur la définition de ma cartographie avec SQLAlchemy et je suis à peu près terminé, sauf une chose. J'ai un objet 'resource' et une table d'association 'relation' avec plusieurs propriétés et une relation entre 2 ressources. Ce que j'ai essayé de faire presque avec succès jusqu'à maintenant, est de fournir sur l'objet de ressource 2 propriétés: parent et enfants pour traverser l'arbre stocké par la table d'association. Une relation entre 2 propriétés ne dure que quelques instants, il existe donc une date de début et une date de fin. Une seule ressource peut être le parent d'une autre ressource à la fois.SQLAlchemy - Problème avec une table d'association et des dates dans la jointure principale

Mon problème est que si j'expire une relation et en crée une nouvelle, la propriété parent n'est pas actualisée. Je pense qu'il y a peut-être un problème avec le primaryjoin pour la propriété parent de resource.

Voici un 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 

Toute idée?

Merci,

Lopes Richard

+0

Ne faites pas que vos assistants potentiels utilisent une barre de défilement horizontale: o) –

+0

Bien sûr. Ça a l'air mieux maintenant. Merci ;-). –

Répondre

0

j'ai effectivement trouvé la raison de ma détresse, et a obtenu fonctionner. See here

Cheers,

Lopes Richard

0

Pensez à utiliser >= au lieu de > en comparaison de date.

Questions connexes