py2neo 问题:连接不可用:无法打开与 ConnectionProfile('bolt://localhost:7687') 的连接



我正在尝试在neo4j desktop上复制这个例子:

https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html

我能够复制所有内容,直到我到达以下行:

import py2neo
default_host = os.environ.get("STELLARGRAPH_NEO4J_HOST")
# Create the Neo4j Graph database object; the arguments can be edited to specify location and authentication
graph = py2neo.Graph(host=default_host, port=None, user=None, password=None)

我尝试了以下尝试来创建neo4j数据库对象:

#1
default_host = os.environ.get("StellarGraph")
graph = py2neo.Graph(host=default_host, port=None, user=None, password=None)
#2
uri = 'bolt://localhost:7687'
graph = Graph(uri, auth=("neo4j", "password"), port= 7687, secure=True)
#3
uri = uri = 'bolt://localhost:7687'
graph = Graph(uri, auth=("neo4j", "password"), port= 7687, secure=True, name= "StellarGraph")

然而,每次我尝试这样做,它会导致这个错误的一些变化:

IndexError                                Traceback (most recent call last)
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:806, in ConnectionPool.acquire(self, force_reset, can_overfill)
804 try:
805     # Plan A: select a free connection from the pool
--> 806     cx = self._free_list.popleft()
807 except IndexError:
IndexError: pop from an empty deque
During handling of the above exception, another exception occurred:
ConnectionRefusedError                    Traceback (most recent call last)
File ~/.local/lib/python3.8/site-packages/py2neo/wiring.py:62, in Wire.open(cls, address, timeout, keep_alive, on_broken)
61 try:
---> 62     s.connect(address)
63 except (IOError, OSError) as error:
ConnectionRefusedError: [Errno 111] Connection refused
The above exception was the direct cause of the following exception:
WireError                                 Traceback (most recent call last)
File ~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py:355, in Bolt.open(cls, profile, user_agent, on_release, on_broken)
354 try:
--> 355     wire = cls._connect(profile, on_broken=on_broken)
356     protocol_version = cls._handshake(wire)
File ~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py:369, in Bolt._connect(cls, profile, on_broken)
368 log.debug("[#%04X] C: (Dialing <%s>)", 0, profile.address)
--> 369 wire = Wire.open(profile.address, keep_alive=True, on_broken=on_broken)
370 local_port = wire.local_address.port_number
File ~/.local/lib/python3.8/site-packages/py2neo/wiring.py:64, in Wire.open(cls, address, timeout, keep_alive, on_broken)
63 except (IOError, OSError) as error:
---> 64     raise_from(WireError("Cannot connect to %r" % (address,)), error)
65 return cls(s, on_broken=on_broken)
File <string>:3, in raise_from(value, from_value)
WireError: Cannot connect to IPv4Address(('localhost', 7687))
The above exception was the direct cause of the following exception:
ConnectionUnavailable                     Traceback (most recent call last)
/home/myname/Project1/graph_import.ipynb Cell 13' in <cell line: 2>()
1 uri = 'bolt://localhost:7687'
----> 2 graph = Graph(uri, auth=("neo4j", "mypass"), port= 7687, secure=True, name= "StellarGraph")
File ~/.local/lib/python3.8/site-packages/py2neo/database.py:288, in Graph.__init__(self, profile, name, **settings)
287 def __init__(self, profile=None, name=None, **settings):
--> 288     self.service = GraphService(profile, **settings)
289     self.__name__ = name
290     self.schema = Schema(self)
File ~/.local/lib/python3.8/site-packages/py2neo/database.py:119, in GraphService.__init__(self, profile, **settings)
116 if connector_settings["init_size"] is None and not profile.routing:
117     # Ensures credentials are checked on construction
118     connector_settings["init_size"] = 1
--> 119 self._connector = Connector(profile, **connector_settings)
120 self._graphs = {}
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:960, in Connector.__init__(self, profile, user_agent, init_size, max_size, max_age, routing_refresh_ttl)
958 else:
959     self._router = None
--> 960 self._add_pools(*self._initial_routers)
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:982, in Connector._add_pools(self, *profiles)
980     continue
981 log.debug("Adding connection pool for profile %r", profile)
--> 982 pool = ConnectionPool.open(
983     profile,
984     user_agent=self._user_agent,
985     init_size=self._init_size,
986     max_size=self._max_size,
987     max_age=self._max_age,
988     on_broken=self._on_broken)
989 self._pools[profile] = pool
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:649, in ConnectionPool.open(cls, profile, user_agent, init_size, max_size, max_age, on_broken)
627 """ Create a new connection pool, with an option to seed one
628 or more initial connections.
629 
(...)
646     scheme
647 """
648 pool = cls(profile, user_agent, max_size, max_age, on_broken)
--> 649 seeds = [pool.acquire() for _ in range(init_size or cls.default_init_size)]
650 for seed in seeds:
651     seed.release()
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:649, in <listcomp>(.0)
627 """ Create a new connection pool, with an option to seed one
628 or more initial connections.
629 
(...)
646     scheme
647 """
648 pool = cls(profile, user_agent, max_size, max_age, on_broken)
--> 649 seeds = [pool.acquire() for _ in range(init_size or cls.default_init_size)]
650 for seed in seeds:
651     seed.release()
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:813, in ConnectionPool.acquire(self, force_reset, can_overfill)
807 except IndexError:
808     if self._has_capacity() or can_overfill:
809         # Plan B: if the pool isn't full, open
810         # a new connection. This may raise a
811         # ConnectionUnavailable exception, which
812         # should bubble up to the caller.
--> 813         cx = self._connect()
814         if cx.supports_multi():
815             self._supports_multi = True
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:764, in ConnectionPool._connect(self)
761 def _connect(self):
762     """ Open and return a new connection.
763     """
--> 764     cx = Connection.open(self.profile, user_agent=self.user_agent,
765                          on_release=lambda c: self.release(c),
766                          on_broken=lambda msg: self.__on_broken(msg))
767     self._server_agent = cx.server_agent
768     return cx
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:174, in Connection.open(cls, profile, user_agent, on_release, on_broken)
172 if profile.protocol == "bolt":
173     from py2neo.client.bolt import Bolt
--> 174     return Bolt.open(profile, user_agent=user_agent,
175                      on_release=on_release, on_broken=on_broken)
176 elif profile.protocol == "http":
177     from py2neo.client.http import HTTP
File ~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py:364, in Bolt.open(cls, profile, user_agent, on_release, on_broken)
362     return bolt
363 except (TypeError, WireError) as error:
--> 364     raise_from(ConnectionUnavailable("Cannot open connection to %r" % profile), error)
File <string>:3, in raise_from(value, from_value)
ConnectionUnavailable: Cannot open connection to ConnectionProfile('bolt+s://localhost:7687')

我也尝试过这个修复的变化,但有相同的错误:

连接py2neo v4到我的neo4j服务器时出现问题

我感谢任何帮助解决这个问题。谢谢!

我可以用下面的语法解决这个问题:

graph = Graph('neo4j://localhost:7687', user="neo4j", password="999")

然而,我现在有一个问题与以下块:

empty_db_query = """
MATCH(n) DETACH
DELETE(n)
"""
tx = graph.begin(autocommit=True)
tx.evaluate(empty_db_query)

对于较新版本的py2neo,图。begin参数使用readonly = F而不是autocommit = True,但无论如何,我现在有这个错误:

ServiceUnavailable                        Traceback (most recent call last)
/home/myname/Project1/graph_import.ipynb Cell 13' in <cell line: 6>()
1 empty_db_query = """
2     MATCH(n) DETACH
3     DELETE(n)
4     """
----> 6 tx = graph.begin(readonly=False)
7 tx.evaluate(empty_db_query)
File ~/.local/lib/python3.8/site-packages/py2neo/database.py:351, in Graph.begin(self, readonly)
340 def begin(self, readonly=False,
341           # after=None, metadata=None, timeout=None
342           ):
343     """ Begin a new :class:`~py2neo.Transaction`.
344 
345     :param readonly: if :py:const:`True`, will begin a readonly
(...)
349     removed. Use the 'auto' method instead.*
350     """
--> 351     return Transaction(self, autocommit=False, readonly=readonly,
352                        # after, metadata, timeout
353                        )
File ~/.local/lib/python3.8/site-packages/py2neo/database.py:915, in Transaction.__init__(self, graph, autocommit, readonly)
913     self._ref = None
914 else:
--> 915     self._ref = self._connector.begin(self.graph.name, readonly=readonly,
916                                       # after, metadata, timeout
917                                       )
918 self._readonly = readonly
919 self._closed = False
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:1357, in Connector.begin(self, graph_name, readonly)
1345 def begin(self, graph_name, readonly=False,
1346           # after=None, metadata=None, timeout=None
1347           ):
1348     """ Begin a new explicit transaction.
1349 
1350     :param graph_name:
(...)
1355     :raises Failure: if the server signals a failure condition
1356     """
-> 1357     cx = self._acquire(graph_name)
1358     try:
1359         return cx.begin(graph_name, readonly=readonly,
1360                         # after=after, metadata=metadata, timeout=timeout
1361                         )
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:1111, in Connector._acquire(self, graph_name, readonly)
1109     return self._acquire_ro(graph_name)
1110 else:
-> 1111     return self._acquire_rw(graph_name)
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:1203, in Connector._acquire_rw(self, graph_name)
1199 # TODO: exit immediately if the server/cluster is in readonly mode
1201 while True:
-> 1203     ro_profiles, rw_profiles = self._get_profiles(graph_name, readonly=False)
1204     if rw_profiles:
1205         # There is at least one writer, so collect the pools
1206         # for those writers. In all implementations to date,
1207         # a Neo4j cluster will only ever contain at most one
1208         # writer (per database). But this algorithm should
1209         # still survive if that changes.
1210         pools = [pool for profile, pool in list(self._pools.items())
1211                  if profile in rw_profiles]
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:1016, in Connector._get_profiles(self, graph_name, readonly)
1014         rt.wait_until_updated()
1015 else:
-> 1016     self.refresh_routing_table(graph_name)
File ~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py:1064, in Connector.refresh_routing_table(self, graph_name)
1062                 cx.release()
1063     else:
-> 1064         raise ServiceUnavailable("Cannot connect to any known routers")
1065 finally:
1066     rt.set_not_updating()
ServiceUnavailable: Cannot connect to any known routers

感谢任何帮助解决这个问题。谢谢你!

最新更新