2011-06-20 184 views
2

用例是我有一個遠程(讀取緩慢)數據庫,我通過它從ORM映射類獲取一些數據。作爲字典鍵的sqlalchemy對象?

我想將非db臨時數據存儲在ORM數據的旁邊,我不想用一堆臨時屬性來污染映射類命名空間(其他人使用的),所以我可以存儲一些對象特定的數據。我真正想做的是將這些用作字典中的關鍵字。

我見過this thread所以我知道這是可以做到的,但我不喜歡的例子:

def __hash__(self): 
    return id(self) if self.id is None else hash(self.id) 

因爲我的使用情況包括DB組AUTO_INCREMENT主鍵哪些不會直到刷新後才存在。可能發生的哈希變化是哈希中的一種,我想避免它。

我可以嘗試修復它,如果我在__hash__中放入一個沖水器,但感覺這樣做太大副作用是一個好主意。

所以,問題是:是否有一種很好的方法來使用ORM映射類實例作爲字典的關鍵字,還是有另一種更好的方式將臨時數據與對象關聯而不會污染它的名稱空間?

回答

3

考慮將本地「非db」數據作爲非映射屬性存儲在適當的映射實例中。例如

local_data = {'batsman': 'Sangakkara', 'bowler': 'swann'} 
mapped_instance_from_query._local_data = local_data 

SQLAlchemy將簡單地忽略未映射的屬性。

+0

總體意義。我想我不得不在類定義中添加這些,但這是做到這一點的正確方法。 – underrun