2010-03-05 5 views
0

Je possède ce mappeur défini:Sqlalchemy - Pouvons-nous utiliser la comparaison de date dans la définition de la 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 > datetime.now())), 
    'children' : relation(Relation, primaryjoin = 
     and_(relation_table.c.parent_id == resource_table.c.res_id, 
     relation_table.c.end_date > func.now()))}) 

Mais pour une raison quelconque, si je crée une nouvelle ligne dans la table de relation et changer la date_fin de l'ancienne ligne dans la relation à une date ancienne, le parent de la propriété est pas à jour. Aussi, si un rechargement de la ligne de ressources, l'ancienne relation avec l'ancienne date est affichée, donc je suis assez sûr que cela a à voir avec la comparaison de date dans le mappeur.

Si je remplace le paramètre end_date par une chaîne de colonne d'indicateur ou un entier et que je fais une comparaison sur l'indicateur, j'obtiens le comportement approprié, mais je souhaite utiliser des dates.

Toute aide est la bienvenue.

Merci,

Lopes Richard

Répondre

0

J'ai effectivement trouvé ce qui était faux. La relation fonctionne réellement. Le problème a été résolu en définissant end_date sur quelque chose comme datetime.now() - 1 seconde, donc cela se produit avant que la ressource ne soit actualisée par SQLAlchemy. Un problème en millisecondes je suppose.

Richard Lopes

+1

En fait, si le code que vous exécutez prend plus de 1 seconde, cette solution n'est pas assez fiable. Donc, à vous de mettre plus de temps, ou compter sur un drapeau booléen sur le end_date qui est l'option la plus sûre. –

Questions connexes