{"id":45498358,"url":"https://github.com/nadobando/pydangorm","last_synced_at":"2026-02-22T18:01:26.960Z","repository":{"id":170215434,"uuid":"646213854","full_name":"nadobando/pydangorm","owner":"nadobando","description":"Python ArangoDB async ORM based on pydantic","archived":false,"fork":false,"pushed_at":"2024-07-20T10:32:46.000Z","size":887,"stargazers_count":18,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-26T09:40:00.878Z","etag":null,"topics":["aioarango","arango","arango-db","arangodb","arangodb-client","fastapi","odm","orm","pydantic","python","sqlalchemy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nadobando.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-27T16:47:22.000Z","updated_at":"2025-10-06T07:20:07.000Z","dependencies_parsed_at":"2024-07-20T11:57:14.362Z","dependency_job_id":null,"html_url":"https://github.com/nadobando/pydangorm","commit_stats":null,"previous_names":["nadobando/pydangorm"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/nadobando/pydangorm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadobando%2Fpydangorm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadobando%2Fpydangorm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadobando%2Fpydangorm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadobando%2Fpydangorm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nadobando","download_url":"https://codeload.github.com/nadobando/pydangorm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadobando%2Fpydangorm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29721044,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T15:10:41.462Z","status":"ssl_error","status_checked_at":"2026-02-22T15:10:04.636Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aioarango","arango","arango-db","arangodb","arangodb-client","fastapi","odm","orm","pydantic","python","sqlalchemy"],"created_at":"2026-02-22T18:00:54.016Z","updated_at":"2026-02-22T18:01:26.935Z","avatar_url":"https://github.com/nadobando.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pydango - Asynchronous Pydantic ArangoDB ORM\n\n`pydangorm` is a Python ORM (Object-Relational Mapping) system tailored for [ArangoDB](https://www.arangodb.com/), a multi-model NoSQL database. It provides a Pythonic interface for defining models, constructing queries, and interacting with ArangoDB, abstracting away the direct complexities of database interactions.\n\n## Features\n\n- **Model Definitions with pydantic(v1)**: Easily define and validate your database models using `pydantic`.\n\n  - VertexModel\n  - EdgeModel\n\n- **Pythonic Query Building**: Construct complex ArangoDB queries with a Pythonic API.\n\n- **Session Management**: Streamlined management of database sessions and connections.\n\n- **Collection Management**: Create indices, truncate collections, and perform other collection operations.\n\n- **Asynchronous Support**: Perform asynchronous database operations for optimized I/O-bound tasks.\n\n______________________________________________________________________\n\n## [Full Documentation](https://nadobando.github.io/pydangorm)\n\n## Installation\n\n```shell\npip install pydangorm\n```\n\n## Quick Start \u0026 Usage Examples\n\n### Defining Models\n\nUsing `pydangorm`, you can define vertex and edge models with ease:\n\n```python\nimport datetime\nfrom typing import Annotated\n\nfrom pydango import (\n    EdgeModel,\n    VertexModel,\n    EdgeCollectionConfig,\n    VertexCollectionConfig,\n    Relation,\n)\nfrom pydango.indexes import PersistentIndex\n\n\nclass Visited(EdgeModel):\n    rating: int\n    on_date: datetime.date\n\n    class Collection(EdgeCollectionConfig):\n        name = \"visited\"\n        indexes = [\n            PersistentIndex(fields=[\"rating\"]),\n        ]\n\n\nclass LivesIn(EdgeModel):\n    since: datetime.datetime\n\n    class Collection(EdgeCollectionConfig):\n        name = \"lives_in\"\n\n\nclass Person(VertexModel):\n    name: str\n    age: int\n    lives_in: Annotated[\"City\", Relation[LivesIn]]\n    visited: Annotated[list[\"City\"], Relation[Visited]]\n\n    class Collection(VertexCollectionConfig):\n        name = \"people\"\n        indexes = [\n            PersistentIndex(fields=[\"name\"]),\n            PersistentIndex(fields=[\"age\"]),\n        ]\n\n\nclass City(VertexModel):\n    name: str\n    population: int\n\n    class Collection(VertexCollectionConfig):\n        name = \"cities\"\n        indexes = [\n            PersistentIndex(fields=[\"name\"]),\n            PersistentIndex(fields=[\"population\"]),\n        ]\n```\n\n### Querying Data\n\nConstruct and execute queries in a Pythonic manner:\n\n```python\nfrom aioarango import ArangoClient\nfrom app.models import Person, City, Visited, LivesIn\n\nfrom pydango import PydangoSession\nfrom pydango.orm import for_\nfrom pydango.connection.utils import get_or_create_db, deplete_cursor\n\nperson = Person(\n    name=\"John\",\n    age=35,\n    lives_in=City(name=\"Buenos Aires\", population=30000000),\n    visited=[\n        City(name=\"Amsterdam\", population=123),\n        City(name=\"New Delhi\", population=123),\n    ],\n    edges={\n        Person.lives_in: LivesIn(since=datetime.datetime.now()),\n        Person.visited: [\n            Visited(rating=10, on_date=datetime.date.today()),\n            Visited(rating=10, on_date=datetime.date.today()),\n        ],\n    },\n)\n\n\nasync def main():\n    db = await get_or_create_db(ArangoClient(), \"app\")\n    session = PydangoSession(database=db)\n    # Retrieving users older than 10 years\n    await session.save(person)\n    assert person.id.startswith(\"people/\")\n\n    db_person = await session.get(Person, person.key, fetch_edges=True, depth=(1, 1))\n    assert db_person == person\n\n    query = for_(Person).filter(Person.age \u003e 10).sort(-Person.age).return_(Person)\n    query_result = await session.execute(query)\n    result = await deplete_cursor(query_result)\n```\n\nMore detailed examples and scenarios can be found in the `tests` directory, which showcases modeling and querying for different use-cases like cities, families, and e-commerce operations.\n\n## Detailed Documentation\n\nFor detailed documentation, please refer to the [documentation](https://nadobando.github.io/pydangorm).\n\n## Contributing\n\nContributions to `pydangorm` are welcome! Please refer to the `CONTRIBUTING.md` file for guidelines.\n\n## License\n\n`pydangorm` is licensed under [MIT](./LICENSE). See the `LICENSE` file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadobando%2Fpydangorm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnadobando%2Fpydangorm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadobando%2Fpydangorm/lists"}