1

我正在用 python 尝试 orientdb。我创建了几个顶点,我注意到如果我在它们的属性名称前加上@,当我在 estudio Web 应用程序上搜索它们时,这些属性会显示在元数据部分。这很有趣,所以我尝试通过我创建的元数据属性id查询顶点过滤。这样做时:

select from V where @id = somevalue

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

4

1 回答 1

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 问题队列并建议上面的 elif 部分应该检查content[key]是 dict 还是“简单值”。如果它是一个 dict,它应该像现在一样处理,否则它应该像一个字段一样处理,但要从其中剥离 @。

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

于 2015-08-18T01:00:19.020 回答