ORM с графическими базами данных, такими как Neo4j в Python

Мне интересно, есть ли решение (или необходимость) ORM с помощью Graph-Database (f.e. Neo4j). Я отслеживаю отношения (A связан с B, который связан с A через C и т.д., Таким образом, создавая большой граф) объектов (включая дополнительные атрибуты для этих объектов) и должен хранить их в БД, и я думаю, что графическая база данных идеально подходит для этой задачи.

Теперь, используя sql-подобные базы данных, я использую sqlalchemyś ORM для хранения моих объектов, особенно из-за того, что я могу извлекать объекты из db и работать с ними в питоническом стиле (использовать их методы и т.д.).

Есть ли какое-либо решение для сопоставления объектов для Neo4j или другого Graph-DB, чтобы я мог хранить и извлекать объекты python в и из Graph-DB и работать с ними легко?

Или вы могли бы написать некоторые функции или адаптеры, например, в документации на sqlite python (http://docs.python.org/library/sqlite3.html#letting-your-object-adapt-itself) для извлечения и хранения объектов?

Ответ 1

На данный момент в Python есть несколько вариантов, основанных на REST-интерфейсах баз данных.

Как я упоминал в приведенной ссылке @Peter, мы работаем над neo4django, который обновляет старую интеграцию Neo4j/Django. Это хороший выбор, если вам нужны сложные запросы и вы хотите ORM, который будет управлять индексацией узла как well-, или если вы уже используете Django. Он работает очень похоже на родной Django ORM. Найдите это на PyPi или GitHub.

Существует также более общее решение, называемое Bulbflow, которое должно работать с любой базой данных графов, поддерживаемой Blueprints. Я не использовал его, но из того, что я видел, он фокусируется на моделировании предметной области - в Bulbflow уже есть, например, рабочие модели отношений, над которыми мы все еще работаем on-, но не очень поддерживаем сложные запросы (как мы делать с наборами запросов Django + использование индекса). Это также позволяет вам работать немного ближе к графику.

Ответ 2

Бесстыдный плагин... есть и мой собственный ORM, который вы также можете проверить: https://github.com/robinedwards/neomodel

Он построен поверх py2neo, используя вызовы API-интерфейсов cypher и rest под капотом, т.е. никакой зависимости от гремлина.

Ответ 3

Может быть, вы могли бы взглянуть на Bulbflow, который позволяет создавать модели в Django, Flask или Pyramid. Однако он работает через REST-клиент вместо python-привязки, предоставляемой Neo4j, поэтому, возможно, он не такой быстрый, как нативная привязка.