2010-03-05 88 views
0

我有這樣的映射定義:Sqlalchemy - 我們可以在關係定義中使用日期比較嗎?

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在關係到舊的日期,物業父未更新。 此外,如果重新加載資源行,舊的關係與舊的日期顯示,所以我很確定它必須與在映射器中的日期比較。

如果我用一個標誌列字符串或整數代替end_date並對該標誌進行比較,我會得到正確的行爲,但我確實想使用日期。

任何幫助,歡迎。

感謝,

理查德·洛佩斯

回答

0

其實我已經發現了什麼是錯誤的。 該關係實際上正在工作。 通過將end_date設置爲類似datetime.now() - 1秒的方式解決了問題,因此它在資源實際上由SQLAlchemy刷新之前發生。 我想是一個毫秒的問題。

Richard Lopes

+1

實際上,如果您運行的代碼需要超過1秒鐘,則此解決方案不夠可靠。所以,你需要花更多的時間,或者依賴於更安全的選項end_date之上的布爾標誌。 – 2010-03-15 02:54:43

相關問題