用例是我有一个远程(读慢)数据库,我从中通过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的键,还是有另一种/更好的方法将临时数据与对象关联而不会污染它的命名空间?
答案 0 :(得分:3)
考虑将本地“非db”数据存储在适当的映射实例中作为非映射属性。 e.g。
local_data = {'batsman': 'Sangakkara', 'bowler': 'swann'}
mapped_instance_from_query._local_data = local_data
SQLAlchemy将简单地忽略未映射的属性。