SQLAlchemy - проблема с таблицей ассоциации и датами в первичном объединении - PullRequest
1 голос
/ 04 марта 2010

Я работаю над определением своего сопоставления с помощью SQLAlchemy, и я почти закончил, за исключением одной вещи. У меня есть объект 'ресурс' и таблица отношений 'отношение' с несколькими свойствами и отношения между двумя ресурсами. До сих пор я пытался сделать это почти успешно, чтобы предоставить объекту ресурса 2 свойства: parent и children для обхода дерева, хранящегося в таблице сопоставлений. Отношение между двумя свойствами длится некоторое время, поэтому есть дата начала и окончания. Только один ресурс может быть одновременно родителем другого ресурса.

Моя проблема в том, что если я истекаю одно отношение и создаю новое, родительское свойство не обновляется. Я думаю, может быть, есть проблема с primaryjoin для родительского свойства ресурса.

Вот код:

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

Есть идеи?

Спасибо

Ричард Лопес

Ответы [ 2 ]

0 голосов
/ 05 марта 2010

Попробуйте использовать >= вместо > в сравнении дат.

0 голосов
/ 05 марта 2010

Я действительно нашел причину моей проблемы и заставил ее работать. Смотрите здесь

Приветствия

Ричард Лопес

...