Python Driver

Connect to Traverse from Python using the official Neo4j Bolt driver.

Install

pip install neo4j

Note: The package name is neo4j (not neo4j-driver, which is deprecated).

Connect

from neo4j import GraphDatabase

driver = GraphDatabase.driver("bolt://localhost:7690")

# With authentication
driver = GraphDatabase.driver(
    "bolt://localhost:7690",
    auth=("admin", "s3cret")
)

Run Queries

records, summary, keys = driver.execute_query(
    "MATCH (n:Person) WHERE n.age > $min_age RETURN n.name, n.age",
    min_age=25,
)
for record in records:
    print(record["n.name"], record["n.age"])

Select a Database

records, summary, keys = driver.execute_query(
    "MATCH (n) RETURN count(n) AS count",
    database_="mydb",
)
print(records[0]["count"])

Write Data

driver.execute_query(
    "CREATE (p:Person {name: $name, age: $age})",
    name="Alice", age=30,
)

Session-Based Queries

with driver.session(database="mydb") as session:
    result = session.run(
        "MATCH (n:Person) RETURN n.name",
    )
    for record in result:
        print(record["n.name"])

Transactions

with driver.session() as session:
    # Transaction function (recommended — auto-retries on transient errors)
    def create_person(tx, name, age):
        tx.run("CREATE (p:Person {name: $name, age: $age})", name=name, age=age)

    session.execute_write(create_person, "Dave", 28)

    # Explicit transaction
    tx = session.begin_transaction()
    tx.run("CREATE (p:Person {name: 'Bob'})")
    tx.run("CREATE (p:Person {name: 'Carol'})")
    tx.commit()

Async

from neo4j import AsyncGraphDatabase

driver = AsyncGraphDatabase.driver("bolt://localhost:7690")

records, summary, keys = await driver.execute_query(
    "MATCH (n) RETURN n LIMIT 5"
)

await driver.close()

Graph Types

records, summary, keys = driver.execute_query(
    "MATCH (n:Person)-[r:KNOWS]->(m) RETURN n, r, m LIMIT 1"
)
record = records[0]

node = record["n"]
print(node.labels)        # frozenset({'Person'})
print(node["name"])       # property access

rel = record["r"]
print(rel.type)           # 'KNOWS'
print(rel.start_node)     # start node
print(rel.end_node)       # end node

Close the Driver

driver.close()

Note: Traverse speaks Bolt 5.1–6.0. See Bolt Protocol for details.