(Unable to retrieve routing information

HI , I am new to Neo4j I tried initially to access it via python on google colab and it worked well, when I tryied from puython runing on mt machine I get (Unable to retrieve routing information), my connection string is uri = "neo4j+s://b680a66a.databases.neo4j.io" and it is running for Mac ( tried intel and M1 )

Could you share some code?

from neo4j import GraphDatabase
import logging
from neo4j.exceptions import ServiceUnavailable

class App:

def __init__(self, uri, user, password):
    self.driver = GraphDatabase.driver(uri, auth=(user, password))

def close(self):
    # Don't forget to close the driver connection when you are finished with it
    self.driver.close()

def create_friendship(self, person1_name, person2_name):
    with self.driver.session() as session:
        # Write transactions allow the driver to handle retries and transient errors
        result = session.write_transaction(
            self._create_and_return_friendship, person1_name, person2_name)
        for row in result:
            print("Created friendship between: {p1}, {p2}".format(p1=row['p1'], p2=row['p2']))

@staticmethod
def _create_and_return_friendship(tx, person1_name, person2_name):
    # To learn more about the Cypher syntax, see https://neo4j.com/docs/cypher-manual/current/
    # The Reference Card is also a good resource for keywords https://neo4j.com/docs/cypher-refcard/current/
    query = (
        "CREATE (p1:Person { name: $person1_name }) "
        "CREATE (p2:Person { name: $person2_name }) "
        "CREATE (p1)-[:KNOWS]->(p2) "
        "RETURN p1, p2"
    )
    result = tx.run(query, person1_name=person1_name, person2_name=person2_name)
    try:
        return [{"p1": row["p1"]["name"], "p2": row["p2"]["name"]}
                for row in result]
    # Capture any errors along with the query and data for traceability
    except ServiceUnavailable as exception:
        logging.error("{query} raised an error: \n {exception}".format(
            query=query, exception=exception))
        raise

def find_person(self, person_name):
    with self.driver.session() as session:
        result = session.read_transaction(self._find_and_return_person, person_name)
        for row in result:
            print("Found person: {row}".format(row=row))

@staticmethod
def _find_and_return_person(tx, person_name):
    query = (
        "MATCH (p:Person) "
        "WHERE p.name = $person_name "
        "RETURN p.name AS name"
    )
    result = tx.run(query, person_name=person_name)
    return [row["name"] for row in result]

if name == "main":
# Aura queries use an encrypted connection using the "neo4j+s" URI scheme
uri = "neo4j://b680a66a.databases.neo4j.io"
user = "neo4j"
password = "XXXX"
app = App(uri, user, password)
app.create_friendship("Alice", "David")
app.find_person("Alice")
app.close()

1 Like

In this topic there was a problem with the python version that was being used. Could you try to verify this?

Thanks fo the suggestion I was using 3.8 I tried with 3.9 but it gave same error . On colab it works fine with 3.7 , locally I tried 3.8, 3.7 and 3.9 and they gave the same error. Wonder if it is link to OS X or with my network

1 Like

Shouldn't this be neo4j+s:// to match the protocol?

thanks with 3.9 and the fix on the uri it is working

1 Like

Hello, I am currently dealing with this exact same problem, however changing the python version did not work for me.

I am attempting to connect to aura using the latest driver version, using the same 'connect' example code. I have tried various combinations of python/driver versions (3.8-3.9, 4.1-4.4 respectively), and always get 'Unable to retrieve routing information'.
Upon further digging, looks like I'm getting a BoltSecurityError: [SSLCertVerificationError]:

"Connection Failed. Please ensure that your database is listening on the correct host and port and that you have enabled encryption if required. Note that the default encryption setting has changed in Neo4j 4.0. See the docs for more information. Failed to establish encrypted connection. (code 1: Operation not permitted)"

Interestingly, the javascript version of this code works without any issues whatsoever with my aura db. Any help in tracking down this python issue would be incredibly appreciated.

Interestingly, trying this on Google Colab with the exact same python versions worked. Seems like this issue may be limited to python locally running on my machine (Mac OS 10.15). Any ideas?

For anyone that comes across this issue later on, I finally resolved this. Under the hood this was an SSL error.

Make sure you have a root certificate installed. In my case, I installed my python version using the Mac package installer from python.org - that automatically downloads a 'Install Certificates' script. Run that and you'll be good to go.