SQLALCHEMY - Podemos usar a comparação de data na definição de relação?
-
24-09-2019 - |
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
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