{ "info": { "author": "Diogo Dutra", "author_email": "diogodutradamata@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 1 - Planning", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Topic :: Database" ], "description": "# dataclassesdb\n\n

\n \n \"dataclassesdb\"\n \n

\n\n

\n Generates SQL and NoSQL database models from @dataclass\n

\n\n---\n\n**Documentation**: https://dutradda.github.io/dataclassesdb\n\n**Source Code**: https://github.com/dutradda/dataclassesdb\n\n---\n\n\n## Key Features\n\n- Fast start data modeling with persistence\n\n- Supports from simple database schemas to complex one\n\n- Integrate with:\n + `SQLALchemy`\n + `aioredis` (*soon*)\n + `google-datastore` (*soon*)\n + `mongodb` (*planned*)\n + `elasticsearch` (*planned*)\n + `aws-dynamodb` (*planned*)\n\n- Same interface as [`sqlalchemy.orm.session.Session`](https://docs.sqlalchemy.org/en/13/orm/session_api.html#sqlalchemy.orm.session.Session)\n\n- Easy integration with other data sources\n\n- Supports redis data structure (like hashs, sets, etc) to store objects\n\n\n## Requirements\n\nPython 3.7+\n\n\n## Instalation\n\n```\n$ pip install dataclassesdb \n```\n\n\n## Basic SQLAlchemy example\n\n```python\nimport asyncio\n\nfrom dataclassesdb import DataSourceType, SessionFactory\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Music:\n name: str\n\n\n@dataclass\nclass Person:\n name: str\n age: int\n music: Music\n\n\nsession = SessionFactory.make(\n Music,\n Person,\n data_source=DataSourceType.RELATIONAL_SQLALCHEMY,\n data_source_args=dict(\n db_url='sqlite://',\n backrefs=True,\n create_tables=True,\n )\n)\n\nperson = Person(\n name='John',\n age=40,\n music=Music('Imagine')\n)\nsession.add(person) # commit=True by default\n\nmusicQuery = session.query(Address)\nmusics = musicQuery.filter(name='Imagine').all()\n\nloop = asyncio.get_event_loop()\nprint(loop.run_until_complete(musics))\n```\n\n```bash\n[\n Music(\n name='Imagine',\n _id=1,\n backrefs=Backrefs(\n person=[Person(age=40, name=John, _id=1)]\n )\n )\n]\n```\n\n\n## Basic aioredis with hash data type example\n\n```python\nimport asyncio\n\nfrom dataclassesdb import DataSourceType, SessionFactoryAsync\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Music:\n name: str\n\n\n@dataclass\nclass Person:\n name: str\n age: int\n music: Music\n\n\nasync def get_musics():\n session = await SessionFactoryAsync.make(\n Address,\n Person,\n data_source=DataSourceType.MEMORY_AIOREDIS,\n data_source_args=dict(\n db_url='redis://',\n backrefs=True,\n )\n )\n\n person = Person(\n name='John',\n age=40,\n music=Music('Imagine')\n )\n await session.add(person)\n\n musicQuery = await session.query(Address)\n return await musicQuery.filter(name='Imagine').all()\n\nloop = asyncio.get_event_loop()\nprint(loop.run_until_complete(musics))\n```\n\n```python\n[\n Music(\n name='Imagine',\n _id=1,\n backrefs=Backrefs(\n person=[Person(age=40, name=John, _id=1)]\n )\n )\n]\n```\n\n\n## Basic aioredis with sorted set data type example\n\n```python\nfrom dataclassesdb import (\n DataSourceType,\n MemorySortedSetRanked,\n ModelKey,\n SessionFactoryAsync,\n SortedValue,\n)\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Music:\n id: ModelKey(str)\n name: str\n\n\nclass Playlist(MemorySortedSetRanked):\n value_type = Music\n\n\n@dataclass\nclass Person:\n name: str\n age: int\n playlist: Playlist\n\n\nsession = await SessionFactoryAsync.make(\n Music,\n Playlist,\n Person,\n data_source=DataSourceType.MEMORY_AIOREDIS,\n data_source_args=dict(\n db_url='redis://',\n backrefs=True,\n )\n)\n\nperson = Person(\n name='John',\n age=40,\n playlist=Playlist(\n Music(id='imagine', name='Imagine'),\n Music(id='come-together', name='Come Together'),\n )\n)\nawait session.add(person)\n\nplaylistQuery = await session.query(Playlist)\nplaylist = await playlistQuery.filter(Person.name=='John').one(withrank=True)\n\nprint(playlist)\n```\n\n```python\n[\n SortedValue(\n rank=1,\n key='imagine'\n ),\n SortedValue(\n rank=2,\n key='come-together'\n )\n]\n```\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dutradda/dataclassesdb", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "dataclassesdb", "package_url": "https://pypi.org/project/dataclassesdb/", "platform": "", "project_url": "https://pypi.org/project/dataclassesdb/", "project_urls": { "Documentation": "https://dutradda.github.io/dataclassesdb/", "Homepage": "https://github.com/dutradda/dataclassesdb" }, "release_url": "https://pypi.org/project/dataclassesdb/0.0.11/", "requires_dist": [ "mkdocs; extra == \"doc\"", "mkdocs-material; extra == \"doc\"", "markdown-include; extra == \"doc\"", "black; extra == \"test\"", "isort; extra == \"test\"", "ipython; extra == \"test\"", "mypy; extra == \"test\"", "pytest-cov; extra == \"test\"", "pytest-mock; extra == \"test\"", "pytest>=5.1.1; extra == \"test\"", "tox; extra == \"test\"" ], "requires_python": ">=3.7", "summary": "Generates ***SQL*** and ***NoSQL*** Database Models from @dataclass", "version": "0.0.11" }, "last_serial": 5841163, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "40a4c7d51435ee31975048998ac63d32", "sha256": "e33270b8785457fa55559c243f45c9b22a6c41da422ed4b5cdf035ce400a57df" }, "downloads": -1, "filename": "dataclassesdb-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "40a4c7d51435ee31975048998ac63d32", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 4014, "upload_time": "2019-09-17T10:54:30", "url": "https://files.pythonhosted.org/packages/f7/b1/da29063e51d0caf02fbb1f9720bf088766fac4170e088c6c862d0f43a8c4/dataclassesdb-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0f4dd05d88a895b67bb6a02fc260a6c", "sha256": "6bd41bebcd8f388fd450035eb378c0b93ce1f43ab2dad4a67738ebcd5521900f" }, "downloads": -1, "filename": "dataclassesdb-0.0.10.tar.gz", "has_sig": false, "md5_digest": "c0f4dd05d88a895b67bb6a02fc260a6c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 10392, "upload_time": "2019-09-17T10:54:34", "url": "https://files.pythonhosted.org/packages/e9/ce/d6c824b26d3d2b06f4e2a93c533328962585c0fcebb6bfb36b39d8bf95e0/dataclassesdb-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "10fb013f04e94ef0c4ad0a07548c3f2d", "sha256": "4bcdf612415bc9dfe964981491c1ca3c2be580554fadf5635af7658688603925" }, "downloads": -1, "filename": "dataclassesdb-0.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "10fb013f04e94ef0c4ad0a07548c3f2d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 4014, "upload_time": "2019-09-17T11:15:46", "url": "https://files.pythonhosted.org/packages/e6/b0/e50b687329be5bc1dc792c456765cf4ebdcdc13ce46bbace7b851c2d6594/dataclassesdb-0.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a20e6d5b4014740c9bf09d8bc0ff494b", "sha256": "978c2137e6a58d43a40791d543170b213dd33c4d8218322c15da35f3e053d664" }, "downloads": -1, "filename": "dataclassesdb-0.0.11.tar.gz", "has_sig": false, "md5_digest": "a20e6d5b4014740c9bf09d8bc0ff494b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 14731, "upload_time": "2019-09-17T11:15:49", "url": "https://files.pythonhosted.org/packages/69/6a/8603b6ce811d946a4a16f7676e091beb9a682fcfa3636d553b4ff37ca00c/dataclassesdb-0.0.11.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "10fb013f04e94ef0c4ad0a07548c3f2d", "sha256": "4bcdf612415bc9dfe964981491c1ca3c2be580554fadf5635af7658688603925" }, "downloads": -1, "filename": "dataclassesdb-0.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "10fb013f04e94ef0c4ad0a07548c3f2d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 4014, "upload_time": "2019-09-17T11:15:46", "url": "https://files.pythonhosted.org/packages/e6/b0/e50b687329be5bc1dc792c456765cf4ebdcdc13ce46bbace7b851c2d6594/dataclassesdb-0.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a20e6d5b4014740c9bf09d8bc0ff494b", "sha256": "978c2137e6a58d43a40791d543170b213dd33c4d8218322c15da35f3e053d664" }, "downloads": -1, "filename": "dataclassesdb-0.0.11.tar.gz", "has_sig": false, "md5_digest": "a20e6d5b4014740c9bf09d8bc0ff494b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 14731, "upload_time": "2019-09-17T11:15:49", "url": "https://files.pythonhosted.org/packages/69/6a/8603b6ce811d946a4a16f7676e091beb9a682fcfa3636d553b4ff37ca00c/dataclassesdb-0.0.11.tar.gz" } ] }