2011-06-20 4 views
2

ユースケースは、ORMのマップされたクラスを介してデータを取得するリモート(読み込み速度が遅い)データベースがあることです。dictキーとしてのsqlalchemyオブジェクト?

私は、ORMデータの側に非dbの一時データを保存したいと思います。私はいくつかの一時的な属性を持つので、マップされたクラスの名前空間(他人が使用する)を汚染したくありません。オブジェクト固有のデータ。私が本当にしたいのは、これをキーとして使用して辞書に入れることです。

私はので、私はそれを行うことができることを知っているが、私は例好きではないthis threadを見てきました:私のユースケースは、どのしません主キーをAUTO_INCREMENTデシベルのセットが含まれているため

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

をフラッシュの後まで存在する。潜在的に変化するハッシュは、ハッシングのノー・ノーエの1つです。私はそれを避けたいのです。

私は__hash__にフラッシュを入れればそれを修正しようとする可能性がありますが、それはあまりにも大きな副作用が良いアイデアであるように感じる。

ORMマッピングされたクラスインスタンスをdictのキーとして使用するか、オブジェクトの名前空間を汚染することなく一時データをオブジェクトに関連付けるもう1つの方法がありますか?

答えて

3

マップされていない適切な属性にローカルの「非db」データをマッピングすることを検討してください。例えば

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

SQLAlchemyはマップされていない属性を無視します。

+0

意味があります。私はクラス定義にこれらを追加しなければならないと思っていましたが、これは正しい方法です。 – underrun

関連する問題