【问题标题】:Sqlalchemy - Can we use date comparison in relation definition?Sqlalchemy - 我们可以在关系定义中使用日期比较吗?
【发布时间】:2011-01-23 23:24: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()))})

但由于某种原因,如果我在关系表中创建新行并将关系中旧行的 end_date 更改为旧日期,则属性 parent 不会更新。 此外,如果重新加载资源行,则会显示与旧日期的旧关系,所以我很确定它与映射器中的日期比较有关。

如果我用标志列字符串或整数替换 end_date 并对标志进行比较,我会得到正确的行为,但我确实想使用日期。

欢迎任何帮助。

谢谢,

理查德·洛佩斯

【问题讨论】:

    标签: python database orm sqlalchemy mapper


    【解决方案1】:

    我确实发现了问题所在。 这种关系实际上是有效的。 该问题已通过将 end_date 设置为 datetime.now() - 1 秒之类的值来解决,因此它发生在 SQLAlchemy 实际刷新资源之前。 我想是毫秒问题。

    理查德·洛佩斯

    【讨论】:

    • 实际上,如果您运行的代码超过 1 秒,则此解决方案不够可靠。因此,由您决定是否投入更多时间,或者依靠 end_date 顶部的布尔标志,这是更安全的选择。
    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多