A Python package for modelling data in a Neo4j graph database with Pydantic.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file neontology-1.0.2.tar.gz
.
File metadata
- Download URL: neontology-1.0.2.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c4adb3dff9ed7b06b5d1587f6fe0cfc7e18388dd14f7782a54053b3bafb76b3 |
|
MD5 | c0be242bb2c712f64bfc06d787ebe393 |
|
BLAKE2b-256 | 46d260ea9bafc5def552408e27479c76112dc83da9324ace325443b23bc93b8d |
File details
Details for the file neontology-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: neontology-1.0.2-py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8782f6b6003136d85c1cbae7cb0f4f3ac009734fdf8899414e31fd2b13622185 |
|
MD5 | e478f777729afb66a41336a312b724b6 |
|
BLAKE2b-256 | cc682324de38a37680e1d4232c4cc543071d180577e75aef57f5a5076f00ffa6 |