Pergunta

Eu tenho este mapeador definido:

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()))})

Mas, por algum motivo, se eu criar uma nova linha na tabela de relações e alterar o END_DATE da linha antiga na relação com uma data antiga, o pai da propriedade não será atualizado. Além disso, se um recarregar a linha do recurso, a antiga relação com a data antiga é exibida, por isso tenho certeza de que ela tem a ver com a comparação de data no mapeador.

Se eu substituir o END_DATE por uma string de coluna ou número inteiro e fizer uma comparação no sinalizador, recebo o comportamento adequado, mas quero usar datas.

Qualquer ajuda é bem -vinda.

Obrigado,

Richard Lopes

Foi útil?

Solução

Na verdade, eu descobri o que estava errado. A relação está realmente funcionando. O problema foi resolvido definindo o end_date para algo como DateTime.now () - 1 segundo, para que isso aconteça antes que o recurso seja realmente atualizado pelo sqlalchemy. Uma questão de milissegundos, suponho.

Richard Lopes

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top