TypeError: Unhashable type UserType when creating a Cassandra Python driver model with a Set of a UDT
TypeError: Unhashable type UserType when creating a Cassandra Python driver model with a Set of a UDT
此问题与 Datastax Cassandra python 驱动程序的对象映射器有关。
尝试使用 "Set" UDT 作为字段创建模型时,出现错误:
TypeError:无法散列的类型:'[UdtClassName]'
但是,我能够创建具有基本类型集(例如文本)的模型或具有 UDT 列表的模型。
请注意,这个问题似乎只存在于对象映射器中,因为我能够使用 CQL 查询在 Cassandra 中创建 UDT 集。
有人遇到过这个问题吗?有人有什么建议吗?
我是运行cassandrapython驱动3.2.2,用python3.4.4
这在Cassandra中是可行的(直接使用核心驱动),但是cqlengine mapper目前不支持。原因是遗留 API 限制,其中映射器将集合和映射规范化为基本 python 类型。 API 因此对集合元素和映射键具有相同的可哈希性要求。
我们有一个未处理的工单 here,但它需要等待下一个主要版本,因为这意味着 API 中的更改。
您可以尝试通过在您的 UDT 模型上提供哈希来解决这个问题 class(如果它有意义的话)。
从 Adam 扩展,在 UserType 上使用散列
class Client(UserType):
mac = columns.Text()
rx = columns.Integer()
tx = columns.Integer()
def __hash__(self):
return hash((self.mac, self.rx, self.tx))
谢谢亚当。
此问题与 Datastax Cassandra python 驱动程序的对象映射器有关。 尝试使用 "Set" UDT 作为字段创建模型时,出现错误: TypeError:无法散列的类型:'[UdtClassName]'
但是,我能够创建具有基本类型集(例如文本)的模型或具有 UDT 列表的模型。
请注意,这个问题似乎只存在于对象映射器中,因为我能够使用 CQL 查询在 Cassandra 中创建 UDT 集。
有人遇到过这个问题吗?有人有什么建议吗?
我是运行cassandrapython驱动3.2.2,用python3.4.4
这在Cassandra中是可行的(直接使用核心驱动),但是cqlengine mapper目前不支持。原因是遗留 API 限制,其中映射器将集合和映射规范化为基本 python 类型。 API 因此对集合元素和映射键具有相同的可哈希性要求。
我们有一个未处理的工单 here,但它需要等待下一个主要版本,因为这意味着 API 中的更改。
您可以尝试通过在您的 UDT 模型上提供哈希来解决这个问题 class(如果它有意义的话)。
从 Adam 扩展,在 UserType 上使用散列
class Client(UserType):
mac = columns.Text()
rx = columns.Integer()
tx = columns.Integer()
def __hash__(self):
return hash((self.mac, self.rx, self.tx))
谢谢亚当。