Introduction
Let’s take a look at the types of data returned by a Cypher query.
The majority of the types returned by a Cypher query are mapped directly to Python types, but some more complex types need special handling.
-
Graph types - Nodes, Relationships and Paths
-
Temporal types - Dates and times
-
Spatial types - Points and distances
Returning graph types
When graph types are returned by a query executed in the Query window, they are visualized in a graph layout.
| Python Type | Neo4j Cypher Type |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Graph types
The following code snippet finds all movies with the specified title and returns person, acted_in and movie.
movie = "Toy Story"
records, summary, keys = driver.execute_query("""
MATCH path = (person:Person)-[actedIn:ACTED_IN]->(movie:Movie {title: $title})
RETURN path, person, actedIn, movie
""", title=movie)Nodes
Nodes are returned as a Node object.
for record in records:
node = record["movie"]print(node.element_id) # (1)
print(node.labels) # (2)
print(node.items()) # (3)
# (4)
print(node["name"])
print(node.get("name", "N/A"))-
The
element_idproperty provides access to the node’s element ID
eg.4:97b72e9c-ae4d-427c-96ff-8858ecf16f88:0 -
The
labelsproperty is a frozenset containing an array of labels attributed to the Node
eg.['Person', 'Actor'] -
The
items()method provides access to the node’s properties as an iterable of all name-value pairs.
eg.{name: 'Tom Hanks', tmdbId: '31'} -
A single property can be retrieved by either using
[]brackets or using theget()method. Theget()method also allows you to define a default property if none exists.
Relationships
Relationships are returned as a Relationship object.
acted_in = record["actedIn"]
print(acted_in.id) # (1)
print(acted_in.type) # (2)
print(acted_in.items()) # (3)
# 4
print(acted_in["roles"])
print(acted_in.get("roles", "(Unknown)"))
print(acted_in.start_node) # (5)
print(acted_in.end_node) # (6)-
id- Internal ID of the relationship (eg.9876) -
type- Type of relationship (eg.ACTED_IN) -
items()- Returns relationship properties as name-value pairs (eg.{role: 'Woody'}) -
Access properties using brackets
[]orget()method -
start_node-Nodeobject at the start of the relationship -
end_node-Nodeobject at the end of the relationship
Paths
A path is a sequence of nodes and relationships and is returned as a Path object.
path = record["path"]
print(path.start_node) # (1)
print(path.end_node) # (2)
print(len(path)) # (1)
print(path.relationships) # (1)-
start_node-Nodeobject at the start of the path -
end_node-Nodeobject at the end of the path -
len(path)- The number of relationships within the path -
relationships- An tuple ofRelationshipobjects within the path.
Paths are iterable
Use iter(path) to iterate over the relationships in a path.
Summary
In this lesson, you learned about the types of data returned by a Cypher query and how to work with them in your application.
Now it’s time to test yourself on what you’ve learned.