Skip to main content

No project description provided

Project description

Purpose of the Package

  • To translate from Pydantic models to Neo4j Graphs

Getting Started

  • Install the package
pip install pydantic-neo4j

Usage

  • Import the package and models
from pydantic_neo4j import (PydanticNeo4j, 
                            RelationshipQueryModel,
                            NodeModel,
                            SequenceCriteriaModel, 
                            SequenceQueryModel, 
                            SequenceNodeModel)

  • Initialize the class and get the utilities
pydantic_neo4j = PydanticNeo4j(username='neo4j', password='neo4j', uri='neo4j://localhost:7687)
match_util = pydantic_neo4j.match_utilities
create_util = pydantic_neo4j.create_utilities
database_operations = pydantic_neo4j.database_operations

  • Create some Pydantic models
class Manufacturer(NodeModel):
    name: str

class Design(NodeModel):
    color: str
    
class Component(NodeModel):
    name: str
    
class IsOrderable(RelationshipModel):
    pass

class Produces(RelationshipModel):
    design_revision: int

  • Create the nodes and relationships. All relationships must have a start_node and end_node
relationships = []

manufacturer = Manufacturer(name="Acme")
design = Design(color="red")
produces = Produces(design_revision=3, start_node=manufacturer, end_node=design)
  • Add to list
relationships.append(produces)
  • Create another relationship and add it to the list
component = Component(component_type="widget")
is_orderable = IsOrderable(start_node=design, end_node=component)

relationships.append(is_orderable)
  • Add the nodes and relationships to the graph
await create_util.create_relationships(relationships=relationships)

  • Query the graph for a single node. Lets find a manufacturer
nodes = await match_util.node_query(node_name='Manufacturer')
___
  • Query the graph for multiple nodes. Lets find all nodes that are active
nodes = await match_util.node_query(criteria={'active': True})

  • Query the graph for a single relationship. Lets find a manufacturer that produces a red design
query = RelationshipQueryModel(
    start_node_name="Manufacturer",
    start_criteria={},
    end_node_name="Design",
    end_criteria={"color": "red"},
    relationship_name="Produces",
    relationship_criteria={})
result = await match_util.match_relationship(query=query)

  • Query the graph for multiple relationships. Lets find all manufacturers that make a widget component
  • This uses a sequence, which is a series of relationships. Similar to Neo4j Path
sequence_query = SequenceQueryModel()

sequence_query.node_sequence.append(SequenceCriteriaModel(name='Manufacturer'))
sequence_query.relationship_sequence.append(SequenceCriteriaModel()) # a relationship with no criteria
sequence_query.node_sequence.append(SequenceCriteriaModel() # a node with no criteria specified
sequence_query.relationship_sequence.append(SequenceCriteriaModel()) #a realtoinship with no criteria
sequence_query.node_sequence.append(SequenceCriteriaModel(component_type="widget", 
                                                          include_with_return=True))
  • The sequence query must always have 1 more node than relationship.
  • The order is important, and is a sequence. node - relationship - node - relationship - node
result = await match_util.sequence_query(sequence_query=sequence_query)

  • Run a specific query, lets delete everything
await database_operations.run_query(query=f"match (n) detach delete n")

Not Implemented

  • Update a node
nodes = await match_util.node_query(name='Manufacturer', criteria={name='Acme'})
for graph_id, node in nodes.items():
    node.name = "Acme2"
    await create_util.update_node(node=node)

  • Update a relationship
    query = RelationshipQueryModel(
    start_node_name="Manufacturer",
    start_criteria={},
    end_node_name="Design",
    end_criteria={"color": "red"},
    relationship_name="Produces",
    relationship_criteria={})
    result = await match_util.match_relationship(query=query)
    for graph_id, relationship in result.items():
        relationship.design_revision = 4
        await create_util.update_relationship(relationship=relationship)

  • Delete a node
nodes = await match_util.node_query(name='Manufacturer', criteria={name='Acme'})
for graph_id, node in nodes.items():
    await create_util.delete_node(node=node)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydantic_neo4j-0.2.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

pydantic_neo4j-0.2.1-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file pydantic_neo4j-0.2.1.tar.gz.

File metadata

  • Download URL: pydantic_neo4j-0.2.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Windows/10

File hashes

Hashes for pydantic_neo4j-0.2.1.tar.gz
Algorithm Hash digest
SHA256 02d54eb7bc095448c0e6ef9e229f4f65e73acaa2b0223e2d2a7b4bb81783c699
MD5 fd0020e92bfacf7b8f206b10c5ad6096
BLAKE2b-256 ddfe08e5c160779e2f83a3a9f6bece3b6fa629a1c64bc35eff33e8177b1d4998

See more details on using hashes here.

File details

Details for the file pydantic_neo4j-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: pydantic_neo4j-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Windows/10

File hashes

Hashes for pydantic_neo4j-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ee2022d50bea8e9f54771f23daaa9c3d98299cedfa622af383bb19635e4f6f79
MD5 7c96495b8e2d24d957206602633fbbbd
BLAKE2b-256 4cec2b1c128eb97cbe8782a5d1cb18247227c8eb4a3dc565081f608d0465fb57

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page