Проблемы с использованием пакетов Python (Neomodel & py2neo) с Neo4j
У меня возникают некоторые проблемы с использованием клиентов Neomodel и py2neo с Neo4j. Я установил Neomodel и py2neo в отдельных виртуальных средах Anaconda и проверил каждое в отдельности. Neo4j устанавливается / устанавливается с помощью докера.
Neomodel
Код
from neomodel import (config, StructuredNode, StringProperty, IntegerProperty,UniqueIdProperty, RelationshipTo, RelationshipFrom)
config.DATABASE_URL = 'bolt://neo4j:anthrax1234@localhost:7687'
class Country(StructuredNode):
code = StringProperty(unique_index=True, required=True)
# traverse incoming IS_FROM relation, inflate to Person objects
inhabitant = RelationshipFrom('Person', 'IS_FROM')
class Person(StructuredNode):
uid = UniqueIdProperty()
name = StringProperty(unique_index=True)
age = IntegerProperty(index=True, default=0)
# traverse outgoing IS_FROM relations, inflate to Country objects
country = RelationshipTo(Country, 'IS_FROM')
jim = Person(name='Jim', age=3).save()
jim.age = 4
jim.save() # validation happens here
jim.delete()
jim.refresh() # reload properties from neo
jim.id # neo4j internal id
Пока Neomodel генерирует узел, просматриваемый в веб-приложении neo4j. Созданный узел - это Jim с age=3, т.е. он, кажется, не зафиксировал тот факт, что возраст Jims изменился с 3 -> 4. Кроме того, я предполагаю, что jim.delete() удалил бы узел, который он не сделал ни, Наконец, он предлагает следующую ошибку (ниже приведен фрагмент последних строк ошибки).
ошибка
...
File "/Users/sjamal/.conda/envs/tneo/lib/python3.6/site-
packages/neomodel/core.py", line 452, in inflate
if db_property in node.properties:
AttributeError: 'Node' object has no attribute 'properties'
Теперь я нашел этот пост, где пользователь "Джек Даниэль" упомянул, что neomodel не поддерживает neo4j 3. Поэтому я попытался закрепить образ Neo4j v.2.3, но затем я получаю следующую ошибку (обратите внимание, что это фрагмент из последних нескольких строк ошибки)
Ошибка при стыковке образа Neo4j 2.3
File "/Users/sjamal/.conda/envs/tneo/lib/python3.6/ssl.py", line 817, in __init__
self.do_handshake()
File "/Users/sjamal/.conda/envs/tneo/lib/python3.6/ssl.py", line 1077, in do_handshake
self._sslobj.do_handshake()
File "/Users/sjamal/.conda/envs/tneo/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
OSError: [Errno 0] Error
Py2neo
Я начал изучать использование p2neo из-за проблем, которые у меня были с Neomodel, но, похоже, я не могу правильно настроить свои конфигурации.
Код
from py2neo import Node, Relationship, Graph
graph = Graph("localhost", user='neo4j', password='password', bolt=None)
alice = Node("Person", name="Alice")
bob = Node("Person", name="Bob")
alice_knows_bob = Relationship(alice, "KNOWS", bob)
graph.create(alice_knows_bob)
ошибка
File "/Users/sjamal/.conda/envs/py2neo_test/lib/python3.6/site-packages/neo4j/bolt/connection.py", line 459, in acquire
connection = self.connector(address)
File "/Users/sjamal/.conda/envs/py2neo_test/lib/python3.6/site-packages/neo4j/v1/bolt.py", line 46, in <lambda>
pool = ConnectionPool(lambda a: connect(a, security_plan.ssl_context, **config))
File "/Users/sjamal/.conda/envs/py2neo_test/lib/python3.6/site-packages/neo4j/bolt/connection.py", line 601, in connect
raise ProtocolError("Connection to %r closed without handshake response" % (address,))
neo4j.bolt.connection.ProtocolError: Connection to ('localhost', 7687) closed without handshake response
Спасибо всем, кто смотрит на это. Я был бы рад получить любое предложение или объяснение о том, как настроить Py2neo, независимо от того, получу ли я Neomodel на работу или нет.
0 ответов
Таким образом, мне удалось решить мою проблему с Py2neo, но не проблему, которую я имел с Neomodel. Если я найду способ заставить Neomodel работать, я опубликую его и либо сделаю ссылку на это сообщение, либо оставлю комментарий в этой теме.
Решение Py2neo с py2neo v4.0 и neo4j v3.o
Я пробовал разные комбинации, начиная с neo4j 2.3 вместе с разными версиями py2neo, такими как 3.1.2, а затем сделал то же самое с neo4j v3.0.
Я публикую свой сценарий, который использовал для создания узла и соединения с графом, так как схожу с ума, пытаясь выяснить, плохо ли я настроил конфигурацию или была ли ошибка в пакете, драйвере и т. Д.
Скрипт Py2neo
from py2neo import Node, Relationship, Graph
graph = Graph('http://localhost:7474/db/data',user='neo4j',pass word='password1234')
tx = graph.begin()
a = Node(label='hero',name='Sabri')
tx.create(a)
tx.commit()
Устаревший драйвер py2neo v3.1.2 в паре с Neo4j v3.4
Как обсуждалось в этом отчете о проблеме Github https://github.com/neo4j/neo4j-python-driver/issues/252 пользователь, который сообщил о проблеме, использовал py2neo 3.1.2 вместе с Neo4jv3.4. Подозрение было связано с устаревшим драйвером (v1.1), который поставлялся с py2neo 3.1.2. Новый дистрибутив Neo4j v3.4, кажется, идет с новым драйвером 1.6.
Обновление py2neo до v4.0 и использование последней версии сервера Neo4j, т.е. v3.4
При этом я столкнулся с другой ошибкой
File "/Users/sjamal/.conda/envs/py2neo.v4/lib/python3.6/site-packages/py2neo/internal/http.py", line 26, in <module>
from neo4j.addressing import SocketAddress
ModuleNotFoundError: No module named 'neo4j.addressing'
В этом потоке stackru обсуждалось ( ModuleNotFoundError: нет модуля с именем 'neo4j.addressing' и ModuleNotFoundError: нет модуля с именем 'neo4j'), что проблема может заключаться в том, что драйвер драйвера 1.6 может быть установлен вручную через pip, что я и сделал,
pip install neo4j-driver==1.6.2
Теперь я получил новую ошибку, когда TypeError был пойман при вызове объекта карты.
File "/Users/sjamal/.conda/envs/py2neo.v4/lib/python3.6/site-packages/py2neo/internal/http.py", line 74, in fix_parameters
raise TypeError("Parameters of type {} are not supported".format(type(value).__name__))
Ошибка типа: параметры карты типов не поддерживаются
Я нашел эту проблему github, опубликованную speters-cmri https://github.com/technige/py2neo/issues/688 которая содержала следующую фиксацию github ( https://github.com/technige/py2neo/compare/v4...CMRI-ProCan:v4) для решения проблемы путем изменения скрипта json.py в пакете py2neo
Я снова запустил свой скрипт, чтобы добавить тестовый узел, и он работал без проблем.
Если вы слишком ленивы или просто слишком разочарованы, чтобы пройти длинное объяснение, вот краткое изложение
1. Make sure neo4j v3.0+ is installed. I suggest you look into docker to install neo4j using a docker image
2. pip install py2neo==v4.0
3. pip install neo4j-driver==1.6.2
4. Modify json.py file as described here https://github.com/technige/py2neo/compare/v4...CMRI-ProCan:v4
5. Run py2neo script outlined above