OrientDB元数据属性

时间:2015-08-14 19:00:08

标签: python orientdb pyorient

我正在尝试使用python的orientdb。我创建了几个顶点,我注意到如果我在@上添加属性名称,当我在estudio web app上搜索它们时,这些属性会显示在元数据部分中。 多数民众赞成有趣,所以我去尝试通过我创建的元数据属性 id 来查询顶点过滤。 这样做的时候:

select from V where @id = somevalue

我收到一个巨大的错误信息。我找不到查询这些自定义元数据属性的方法。

1 个答案:

答案 0 :(得分:0)

你的问题是python / pyorient(我假设你根据其他问题使用pyorient)。

Pyorient尝试将数据库字段映射到对象属性,但python文档说the valid characters for identifiers are the same as in Python 2.x: the uppercase and lowercase letters A through Z, the underscore _ and, except for the first character, the digits 0 through 9. (source)。因此,您不能使用'@'作为字段名称,并期望pyorient工作。

我快速浏览了pyorient源代码,事实证明问题甚至比上面更大...... pyorient/types.py

elif key[0:1] == '@':
    # special case dict
    # { '@my_class': { 'accommodation': 'hotel' } }
    self.__o_class = key[1:]
    for _key, _value in content[key].items():
        self.__o_storage[_key] = _value

所以pyorient假设任何以“@”字符开头的记录字段后跟一个类/集群名称,然后是字段的字典。我想你可以发帖到pyorient issue queue并建议上面的elif部分检查content[key]是否是dict,或者是“简单值”。如果它是一个字典,它应该像现在一样处理,否则它应该像字段一样处理,但是从它上面剥离。

最终,在字段名称中不使用@符号将是最简单的解决方案。