Проблемы с использованием пакетов 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
Другие вопросы по тегам