Tired of copy-pasting code that doesn't work?
Write Python code 3.2x faster than ChatGPT.
Neo4j is the world's leading graph database, designed to store and query highly connected data efficiently. When combined with Python, Neo4j enables developers to build powerful applications that leverage relationships between data points. This comprehensive guide covers everything you need to know about connecting Python to Neo4j.
Why Use Neo4j with Python?
Neo4j with Python offers powerful capabilities:
- Native graph storage optimized for relationships
- Powerful Cypher query language for pattern matching
- Excellent performance for traversing relationships
- ACID compliance for data integrity
- Real-time insights from connected data
- Perfect for social networks, recommendations, fraud detection
- Scalable architecture for enterprise applications
- Rich ecosystem of graph algorithms
Prerequisites
Before connecting Python to Neo4j, ensure you have:
- Python 3.6 or higher installed
- Neo4j database installed (Community or Enterprise)
- Basic understanding of graph databases and Cypher
- Neo4j connection details (URI, username, password)
Installing the Neo4j Driver
Install the official Neo4j Python driver:
bash
pip install neo4j
Basic Connection to Neo4j
Let's start with a simple connection:
python
from neo4j import GraphDatabase
# Connection details
uri = "bolt://localhost:7687"
username = "neo4j"
password = "your_password"
# Create driver
driver = GraphDatabase.driver(uri, auth=(username, password))
# Verify connectivity
driver.verify_connectivity()
print("Connected to Neo4j successfully!")
# Close driver
driver.close()
Connection with Error Handling
python
from neo4j import GraphDatabase
from neo4j.exceptions import ServiceUnavailable, AuthError
def create_neo4j_connection():
try:
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "password"),
max_connection_lifetime=3600,
max_connection_pool_size=50,
connection_acquisition_timeout=120
)
# Verify connection
driver.verify_connectivity()
print("Successfully connected to Neo4j")
# Get server info
with driver.session() as session:
result = session.run("CALL dbms.components() YIELD versions")
version = result.single()[0][0]
print(f"Neo4j version: {version}")
return driver
except ServiceUnavailable as e:
print(f"Neo4j service unavailable: {e}")
return None
except AuthError as e:
print(f"Authentication failed: {e}")
return None
except Exception as e:
print(f"Error: {e}")
return None
# Usage
driver = create_neo4j_connection()
if driver:
driver.close()
Creating Nodes
python
from neo4j import GraphDatabase
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "password")
)
# Create a single node
with driver.session() as session:
result = session.run("""
CREATE (e:Employee {
employee_id: $employee_id,
first_name: $first_name,
last_name: $last_name,
email: $email,
department: $department,
salary: $salary
})
RETURN e
""", employee_id="EMP001", first_name="John", last_name="Doe",
email="john@company.com", department="Engineering", salary=75000)
record = result.single()
print(f"Created node: {record['e']}")
driver.close()
Creating Multiple Nodes
python
from neo4j import GraphDatabase
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "password")
)
# Create multiple nodes
employees = [
{"id": "EMP001", "name": "John Doe", "dept": "Engineering"},
{"id": "EMP002", "name": "Jane Smith", "dept": "Marketing"},
{"id": "EMP003", "name": "Bob Johnson", "dept": "Sales"}
]
with driver.session() as session:
for emp in employees:
session.run("""
CREATE (e:Employee {
employee_id: $id,
name: $name,
department: $dept
})
""", id=emp["id"], name=emp["name"], dept=emp["dept"])
print(f"Created {len(employees)} employee nodes")
driver.close()
Creating Relationships
python
from neo4j import GraphDatabase
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "password")
)
with driver.session() as session:
# Create two nodes and relationship
session.run("""
CREATE (e1:Employee {employee_id: 'EMP001', name: 'John Doe'})
CREATE (e2:Employee {employee_id: 'EMP002', name: 'Jane Smith'})
CREATE (e1)-[:REPORTS_TO {since: date('2024-01-01')}]->(e2)
""")
print("Nodes and relationship created!")
# Create relationship between existing nodes
session.run("""
MATCH (e1:Employee {employee_id: 'EMP003'})
MATCH (e2:Employee {employee_id: 'EMP002'})
CREATE (e1)-[:WORKS_WITH {project: 'ProjectX'}]->(e2)
""")
print("Relationship created between existing nodes!")
driver.close()
Querying Nodes
Find All Nodes
python
from neo4j import GraphDatabase
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "password")
)
with driver.session() as session:
# Find all employee nodes
result = session.run("""
MATCH (e:Employee)
RETURN e.employee_id, e.name, e.department
ORDER BY e.name
More Like This
Automating Spreadsheets with Python 101
How to tell the difference between a good and bad Python automation target.
10 Mistakes To Look Out For When Transitioning from Excel To Python
10 Common Mistakes for new programmers transitioning from Excel to Python
Research shows Mito speeds up by 400%
We're always on the hunt for tools that improve our efficiency at work. Tools that let us accomplish more with less time, money, and resources.
3 Rules for Choosing Between SQL and Python
Analysts at the world's top banks are automating their manual Excel work so they can spend less time creating baseline reports, and more time building new analyses that push the company forward.
Tired of copy-pasting code that doesn't work?
Write Python code 3.2x faster than ChatGPT.