Ошибка соединения py2neo, python 3, win10 64-bit

Я пытаюсь подключиться к серверу Neo4j с помощью обучающих команд, однако получаю следующую ошибку:

from py2neo import Graph
g = Graph(host='localhost', port=7687)
tx = g.begin()
a = Node("Person", name="Alice")
tx.create(a)
b = Node("Person", name="Bob")
ab = Relationship(a, "KNOWS", b)
tx.create(ab)
tx.commit()
print(g.exists(ab))

Blockquote

---------------------------------------------------------------------------
ConnectionRefusedError                    Traceback (most recent call last)
~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connection.py in _new_conn(self)
    140             conn = connection.create_connection(
--> 141                 (self.host, self.port), self.timeout, **extra_kw)
    142 

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\util\connection.py in create_connection(address, timeout, source_address, socket_options)
     82     if err is not None:
---> 83         raise err
     84 

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\util\connection.py in create_connection(address, timeout, source_address, socket_options)
     72                 sock.bind(source_address)
---> 73             sock.connect(sa)
     74             return sock

ConnectionRefusedError: [WinError 10061] Невозможно установить соединение, так как целевая машина активно отказала ему

Во время обработки вышеупомянутого исключения произошло другое исключение:

NewConnectionError                        Traceback (most recent call last)
~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    600                                                   body=body, headers=headers,
--> 601                                                   chunked=chunked)
    602 

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    356         else:
--> 357             conn.request(method, url, **httplib_request_kw)
    358 

~\Anaconda3\envs\wavelength\lib\http\client.py in request(self, method, url, body, headers, encode_chunked)
   1238         """Send a complete request to the server."""
-> 1239         self._send_request(method, url, body, headers, encode_chunked)
   1240 

~\Anaconda3\envs\wavelength\lib\http\client.py in _send_request(self, method, url, body, headers, encode_chunked)
   1284             body = _encode(body, 'body')
-> 1285         self.endheaders(body, encode_chunked=encode_chunked)
   1286 

~\Anaconda3\envs\wavelength\lib\http\client.py in endheaders(self, message_body, encode_chunked)
   1233             raise CannotSendHeader()
-> 1234         self._send_output(message_body, encode_chunked=encode_chunked)
   1235 

~\Anaconda3\envs\wavelength\lib\http\client.py in _send_output(self, message_body, encode_chunked)
   1025         del self._buffer[:]
-> 1026         self.send(msg)
   1027 

~\Anaconda3\envs\wavelength\lib\http\client.py in send(self, data)
    963             if self.auto_open:
--> 964                 self.connect()
    965             else:

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connection.py in connect(self)
    165     def connect(self):
--> 166         conn = self._new_conn()
    167         self._prepare_conn(conn)

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connection.py in _new_conn(self)
    149             raise NewConnectionError(
--> 150                 self, "Failed to establish a new connection: %s" % e)
    151 

NewConnectionError:: не удалось установить новое соединение: [WinError 10061] Не удалось установить соединение, поскольку целевая машина активно отказывала в этом

Во время обработки вышеупомянутого исключения произошло другое исключение:

MaxRetryError                             Traceback (most recent call last)
~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\http.py in request(self, method, url, fields, headers, **urlopen_kw)
    188         try:
--> 189             return self._http.request(method, url, fields, headers, **urlopen_kw)
    190         except MaxRetryError:

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\request.py in request(self, method, url, fields, headers, **urlopen_kw)
     69                                             headers=headers,
---> 70                                             **urlopen_kw)
     71 

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\request.py in request_encode_body(self, method, url, fields, headers, encode_multipart, multipart_boundary, **urlopen_kw)
    147 
--> 148         return self.urlopen(method, url, **extra_kw)

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    667                                 release_conn=release_conn, body_pos=body_pos,
--> 668                                 **response_kw)
    669 

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    667                                 release_conn=release_conn, body_pos=body_pos,
--> 668                                 **response_kw)
    669 

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    667                                 release_conn=release_conn, body_pos=body_pos,
--> 668                                 **response_kw)
    669 

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    638             retries = retries.increment(method, url, error=e, _pool=self,
--> 639                                         _stacktrace=sys.exc_info()[2])
    640             retries.sleep()

~\Anaconda3\envs\wavelength\lib\site-packages\urllib3\util\retry.py in increment(self, method, url, response, error, _pool, _stacktrace)
    387         if new_retry.is_exhausted():
--> 388             raise MaxRetryError(_pool, url, error or ResponseError(cause))
    389 

MaxRetryError: HTTPConnectionPool (host = 'localhost: 7687', port = None): превышено максимальное количество повторов с помощью url: /db/data/ транзакция (вызвано NewConnectionError(': не удалось установить новое соединение: [WinError 10061] Не удалось установить соединение) быть сделанным, потому что целевая машина активно отказалась от него ",))

Во время обработки вышеупомянутого исключения произошло другое исключение:

ServiceUnavailable                        Traceback (most recent call last)
<ipython-input-20-4018ad364426> in <module>()
      1 tx = g.begin()
      2 a = Node("Person", name="Alice")
----> 3 tx.create(a)
      4 b = Node("Person", name="Bob")
      5 ab = Relationship(a, "KNOWS", b)

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\graph.py in create(self, subgraph)
    933             raise TypeError("No method defined to create object %r" % subgraph)
    934         else:
--> 935             create(self)
    936 
    937     def degree(self, subgraph):

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\types.py in __db_create__(self, tx)
    331         statement = "\n".join(reads + writes + ["RETURN %s LIMIT 1" % ", ".join(returns)])
    332         tx.entities.append(returns)
--> 333         list(tx.run(statement, parameters))
    334 
    335     def __db_degree__(self, tx):

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\graph.py in __iter__(self)
   1110 
   1111     def __iter__(self):
-> 1112         while self.forward():
   1113             yield self._current
   1114 

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\graph.py in forward(self, amount)
   1169         fetch = self._result.fetch
   1170         while moved != amount:
-> 1171             new_current = fetch()
   1172             if new_current is None:
   1173                 break

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\graph.py in fetch(self)
    778         """
    779         try:
--> 780             return next(self.result_iterator)
    781         except StopIteration:
    782             return None

~\Anaconda3\envs\wavelength\lib\site-packages\neo4j\v1\api.py in records(self)
    435         hydrate = self.value_system.hydrate
    436         zipper = self.zipper
--> 437         keys = self.keys()
    438         records = self._records
    439         while records:

~\Anaconda3\envs\wavelength\lib\site-packages\neo4j\v1\api.py in keys(self)
    425         """
    426         while self._keys is None and self.online():
--> 427             self.fetch()
    428         return self._keys
    429 

~\Anaconda3\envs\wavelength\lib\site-packages\neo4j\v1\api.py in fetch(self)
    407         """
    408         if self.online():
--> 409             return self._session.fetch()
    410         else:
    411             return 0

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\http.py in fetch(self)
    295 
    296     def fetch(self):
--> 297         return self.sync()
    298 
    299     def sync(self):

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\http.py in sync(self)
    306         count = 0
    307         try:
--> 308             response = self.post(ref, {"statements": self._statements}, expected=(OK, CREATED))
    309             if response.status == 201:
    310                 location_path = urlsplit(response.headers["Location"]).path

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\http.py in post(self, ref, json, expected)
    210             headers["Content-Type"] = "application/json"
    211             json = json_dumps(json).encode('utf-8')
--> 212         rs = self.request("POST", self.path + ref, headers=self._headers, body=json)
    213         if rs.status not in expected:
    214             raise_error(self.uri, rs.status, rs.data)

~\Anaconda3\envs\wavelength\lib\site-packages\py2neo\http.py in request(self, method, url, fields, headers, **urlopen_kw)
    189             return self._http.request(method, url, fields, headers, **urlopen_kw)
    190         except MaxRetryError:
--> 191             raise ServiceUnavailable("Cannot send %r request to %r" % (method, url))
    192 
    193     def get_json(self, ref):

ServiceUnavailable: Невозможно отправить запрос POST в / db / data / транзакцию

2 ответа

Решил это, очень грубая ошибка с моей стороны - мне пришлось инициализировать сервер перед выполнением вышеуказанных команд. Извиняюсь за "плачущего волка")

Возможно, вы не проходите аутентификацию правильно. Вы можете попробовать следующее:

from neo4j.v1 import GraphDatabase
uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "your password"))
with driver.session() as session:
        with session.begin_transaction() as tx:
            for record in tx.run("your cypher query"):
                {process the response}

Я использую Neo4j Community 4.0 с последним официальным драйвером Neo4j Bolt и получаю ту же ошибку.

Чтобы от него избавиться, мне пришлось раскомментировать следующую настройку в neo4j.conf и перезапустите сервис Neo4j:

# To accept non-local connections, uncomment this line:
dbms.default_listen_address=0.0.0.0

Не уверен, почему сервер Neo4J считает соединение из сеанса локального драйвера удаленным, но у меня это сработало.

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