Overview:
- Nodes and the relationships between them form a graph. There may not be any relationship at all in a graph.
- In graph theory nodes are also called as vertexes and the relationships are called as edges.
- In the property graph model provided by Neo4j, nodes and relationships can have a number of labels and properties.
- A property is a name value pair.
- The Cypher Query Language (CQL) provides a powerful syntax through which nodes and relationships can be created on a Neo4j database.
Creating graphs on Neo4j database through Python:
- Using the Neo4j Python driver (neo4j-driver) a Python program can create, manipulate and analyze the graphs on a Neo4j graph database.
- After importing the GraphDatabase module the first step in connecting to the Neo4j database is to create a driver instance.
- The driver instance takes care of managing the connection pool required for the application, which can be controlled through parameters like MaxConnectionPoolSize.
- The Python example program below creates a set of nodes representing some of the Ivy League universities and the distance between them in miles.

- Through the session object obtained from the driver the CQL command is sent to the Neo4j server, which creates the university nodes and the distance relationships between them.
Example:
| # import the neo4j driver for Python from neo4j.v1 import GraphDatabase 
 # Database Credentials uri = "bolt://localhost:7687" userName = "neo4j" password = "test" 
 # Connect to the neo4j database server graphDB_Driver = GraphDatabase.driver(uri, auth=(userName, password)) 
 # CQL to query all the universities present in the graph cqlNodeQuery = "MATCH (x:university) RETURN x" 
 # CQL to query the distances from Yale to some of the other Ivy League universities cqlEdgeQuery = "MATCH (x:university {name:'Yale University'})-[r]->(y:university) RETURN y.name,r.miles" 
 # CQL to create a graph containing some of the Ivy League universities cqlCreate = """CREATE (cornell:university { name: "Cornell University"}), (yale:university { name: "Yale University"}), (princeton:university { name: "Princeton University"}), (harvard:university { name: "Harvard University"}), 
 (cornell)-[:connects_in {miles: 259}]->(yale), (cornell)-[:connects_in {miles: 210}]->(princeton), (cornell)-[:connects_in {miles: 327}]->(harvard), 
 (yale)-[:connects_in {miles: 259}]->(cornell), (yale)-[:connects_in {miles: 133}]->(princeton), (yale)-[:connects_in {miles: 133}]->(harvard), 
 (harvard)-[:connects_in {miles: 327}]->(cornell), (harvard)-[:connects_in {miles: 133}]->(yale), (harvard)-[:connects_in {miles: 260}]->(princeton), 
 (princeton)-[:connects_in {miles: 210}]->(cornell), (princeton)-[:connects_in {miles: 133}]->(yale), (princeton)-[:connects_in {miles: 260}]->(harvard)""" 
 # Execute the CQL query with graphDB_Driver.session() as graphDB_Session: # Create nodes graphDB_Session.run(cqlCreate) 
 # Query the graph nodes = graphDB_Session.run(cqlNodeQuery) 
 print("List of Ivy League universities present in the graph:") for node in nodes: print(node) 
 # Query the relationships present in the graph nodes = graphDB_Session.run(cqlEdgeQuery) 
 print("Distance from Yale University to the other Ivy League universities present in the graph:") for node in nodes: print(node) | 
Output:
| List of Ivy League universities present in the graph: <Record x=<Node id=137 labels={'university'} properties={'name': 'Cornell University'}>> <Record x=<Node id=138 labels={'university'} properties={'name': 'Yale University'}>> <Record x=<Node id=139 labels={'university'} properties={'name': 'Princeton University'}>> <Record x=<Node id=140 labels={'university'} properties={'name': 'Harvard University'}>> Distance from Yale University to the other Ivy League universities present in the graph: <Record y.name='Cornell University' r.miles=259> <Record y.name='Princeton University' r.miles=133> <Record y.name='Harvard University' r.miles=133> |