【问题标题】:sqlalchemy objects as dict keys?sqlalchemy 对象作为字典键?
【发布时间】:2011-06-20 20:19:40
【问题描述】:

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

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

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

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

因为我的用例包括一个 db set auto_increment 主键,它在刷新后才会存在。可能改变哈希是哈希的禁忌之一,我想避免它。

如果我在__hash__ 中添加同花顺,我可以尝试修复它,但感觉副作用太大,不是一个好主意。

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

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

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

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

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

    【讨论】:

    • 完全有道理。我在想我必须在类定义中添加这些,但这是正确的方法。
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2012-08-31
    • 2011-10-09
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多