sqlalchemy对象作为dict键?

时间:2011-06-20 11:32:50

标签: python sqlalchemy

用例是我有一个远程(读慢)数据库,我从中通过ORM映射类获取一些数据。

我想在ORM数据旁边存储非db临时数据,我不想用一堆临时属性污染映射的类命名空间(其他人使用),这样我就可以存储一些对象具体数据。我真正想做的是将它们用作词典中的键。

我见过this thread所以我知道可以做到,但我不喜欢这样的例子:

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

因为我的用例包含一个db set auto_increment主键,直到刷新后才会存在。潜在变化的哈希值是哈希的一个禁忌,我想避免它。

如果我在__hash__中加注同花,我可以尝试解决这个问题,但这样做会产生太大的副作用而不是一个好主意。

所以,问题是:有没有一种好方法可以使用ORM映射的类实例作为dict的键,还是有另一种/更好的方法将临时数据与对象关联而不会污染它的命名空间?

1 个答案:

答案 0 :(得分:3)

考虑将本地“非db”数据存储在适当的映射实例中作为非映射属性。 e.g。

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

SQLAlchemy将简单地忽略未映射的属性。