Sqlalchemy - 我们可以在关系定义中使用日期比较吗?

0 投票
1 回答
1206 浏览
提问于 2025-04-15 20:02

我定义了一个映射器:

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

但是有个问题,如果我在关系表中创建了一行新数据,并把旧数据的结束日期改成了一个早于当前的日期,属性parent却没有更新。

而且如果我重新加载资源行,旧的关系和旧的日期仍然会显示出来,所以我很确定这和映射器中的日期比较有关。

如果我把结束日期换成一个标志列(比如字符串或整数),然后用这个标志进行比较,就能得到正确的结果,但我还是想用日期。

希望能得到一些帮助。

谢谢,

理查德·洛佩斯

1 个回答

0

我其实找到了问题所在。关系是正常工作的。问题是通过把结束时间设置为像现在时间减去1秒这样的值来解决的,这样在SQLAlchemy真正刷新资源之前就发生了。我想这只是个毫秒级的细节问题。

理查德·洛佩斯

撰写回答