Атрибуты метаданных OrientDB

Я пытаюсь orientdb с Python. Я создал пару вершин и заметил, что если я добавлю к имени их свойств знак @, то при поиске их в веб-приложении estudio эти свойства появятся в разделе метаданных. Это интересно, поэтому я пошел и попытался запросить фильтрацию вершин по идентификатору свойства метаданных, который я создал. При этом:

select from V where @id = somevalue

Я получаю огромное сообщение об ошибке. Я не мог найти способ запроса этих пользовательских свойств метаданных.

1 ответ

Ваша проблема с 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. (источник). Таким образом, вы не можете использовать '@' в качестве имени поля и ожидать, что 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 предполагает, что любое поле записи, начинающееся с символа '@', сопровождается именем класса / кластера, а затем указанием полей. Я полагаю, вы могли бы отправить сообщение в очередь проблем с пиориентами и предложить, чтобы вышеприведенный раздел elif проверял, content[key] это диктат или "простая ценность". Если это был dict, он должен обрабатываться так, как он есть в настоящее время, в противном случае он должен обрабатываться как поле, но удалить из него символ @.

В конечном итоге, не использовать символ @ в именах полей будет самым простым решением.

Другие вопросы по тегам