Skip to main content

A Python package for modelling data in a Neo4j graph database with Pydantic and Pandas.

Project description

Neontology: Neo4j, Python and Pydantic

Easily ingest data into a Neo4j graph database with Python, Pydantic and pandas. Neontology is a simple object-graph mapper which lets you use Pydantic models to define Nodes and Relationships. It imposes certain restrictions on how you model data, which aims to make life easier for most users but may provide too many limitations for others. The focus of Neontology is getting data into the database, for running complex queries and accessing data, consider using the Neo4j browser or bloom.

Read the documentation here

Note on v1

With v1, we have upgraded to Pydantic v2 which brings some major changes (and improvements!). Read their migration guide to see what changes you might need to make to your models.

Installation

pip install neontology

Example

from typing import ClassVar, Optional, List
import pandas as pd
from neontology import BaseNode, BaseRelationship, init_neontology, auto_constrain

# We define nodes by inheriting from BaseNode
class PersonNode(BaseNode):
    __primarylabel__: ClassVar[str] = "Person"
    __primaryproperty__: ClassVar[str] = "name"
    __secondarylabels__: ClassVar[Optional[List]] = ["individual", "somebody"]
    
    name: str
    age: int

# We define relationships by inheriting from BaseRelationship
class FollowsRel(BaseRelationship):
    __relationshiptype__: ClassVar[str] = "FOLLOWS"
    
    source: PersonNode
    target: PersonNode

# initialise the connection to the database
init_neontology(
    neo4j_uri=NEO4J_URI,
    neo4j_username=NEO4J_USERNAME,
    neo4j_password=NEO4J_PASSWORD
)   

# Define a couple of people
alice = PersonNode(name="Alice", age=40)

bob = PersonNode(name="Bob", age=40)

# Create them in the database
alice.create()
bob.create()

# Create a follows relationship between them
rel = FollowsRel(source=bob,target=alice)
rel.merge()

# We can also use pandas DataFrames to create multiple nodes
node_records = [{"name": "Freddy", "age": 42}, {"name": "Philipa", "age":42}]
node_df = pd.DataFrame.from_records(node_records)

PersonNode.merge_df(node_df)

# We can also merge relationships from a pandas DataFrame, using the primary property values of the nodes
rel_records = [
    {"source": "Freddy", "target": "Philipa"},
    {"source": "Alice", "target": "Freddy"}
]
rel_df = pd.DataFrame.from_records(rel_records)

FollowsRel.merge_df(rel_df)

Configuring your graph connection

With a dotenv file

You can use a .env file as below, which should automatically get picked up by neontology.

# .env
NEO4J_URI=neo4j+s://myneo4j.example.com
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=<PASSWORD>

With the above environment variables defined, you can just use init_neontology() without providing any arguments.

On initialisation

Alternatively, you can explicitly provide access information:

init_neontology(
    neo4j_uri="neo4j+s://mydatabaseid.databases.neo4j.io",
    neo4j_username="neo4j",
    neo4j_password="password"
)

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

neontology-1.3.1.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

neontology-1.3.1-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

Details for the file neontology-1.3.1.tar.gz.

File metadata

  • Download URL: neontology-1.3.1.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for neontology-1.3.1.tar.gz
Algorithm Hash digest
SHA256 02583c4a416842739c3cb6b8ac977499fed8a4ceb59201bf479ff431678a44f8
MD5 aa1fb4f83ab7a56f7486780344d0005a
BLAKE2b-256 ef4ff44de2318cefeab6b780ef390426cc4d47ecad06c986b02b9775c3dd73fb

See more details on using hashes here.

File details

Details for the file neontology-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: neontology-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for neontology-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f5bc51451f6d0f611894ab05e467fa3af54168b3b64f098bcfd385ff15c2c4be
MD5 dce7724a8d3b9090f2d7f269226f0fd1
BLAKE2b-256 9035c46993240a2c33c6688eb1588a150d6446dbd948666b4261bdd00521137f

See more details on using hashes here.

Supported by

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