# Strawberry SQLAlchemy Mapper
[![PyPI Version][pypi-badge]][pypi-url]
![python][python-badge]
[![Downloads][downloads-badge]][downloads-url]
[![Test Coverage][coverage-badge]][coverage-url]
[![CI/CD Status][ci-badge]][ci-url]
[![Discord][discord-badge]][discord-url]
The simplest way to implement autogenerated [Strawberry][strawberry-url] types for columns and relationships in SQLAlchemy models.
Instead of manually listing every column and relationship in a SQLAlchemy model, strawberry-sqlalchemy-mapper
lets you decorate a class declaration and it will automatically generate the necessary strawberry fields
for all columns and relationships (subject to the limitations below) in the given model.
- Native support for most of SQLAlchemy's most common types. (See all supported types [here](#supported-types))
- Extensible to arbitrary custom SQLAlchemy types.
- Automatic batching of queries, avoiding N+1 queries when getting relationships
- Support for SQLAlchemy >=1.4.x
- Lightweight and fast.
## Table of Contents
- [Getting Started](#getting-started)
- [Installation](#installation)
- [Basic Usage](#basic-usage)
- [Limitations](#limitations)
- [Supported Types](#supported-types)
- [Association Proxies](#association-proxies)
- [Polymorphic Hierarchies](#polymorphic-hierarchies)
- [Contributing](#contributing)
- [⚖️ LICENSE](#️-license)
## Getting Started
### Installation
strawberry-sqlalchemy-mapper is available on [PyPi](https://pypi.org/project/strawberry-sqlalchemy-mapper/)
```
pip install strawberry-sqlalchemy-mapper
```
### Basic Usage
First, define your sqlalchemy model:
```python
# models.py
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class Employee(Base):
__tablename__ = "employee"
id = Column(UUID, primary_key=True)
name = Column(String, nullable=False)
password_hash = Column(String, nullable=False)
department_id = Column(UUID, ForeignKey("department.id"))
department = relationship("Department", back_populates="employees")
class Department(Base):
__tablename__ = "department"
id = Column(UUID, primary_key=True)
name = Column(String, nullable=False)
employees = relationship("Employee", back_populates="department")
```
Next, decorate a type with `strawberry_sqlalchemy_mapper.type()`
to register it as a strawberry type for the given SQLAlchemy model.
This will automatically add fields for the model's columns, relationships, association proxies,
and hybrid properties. For example:
```python
# In another file
# ...
import strawberry
from strawberry_sqlalchemy_mapper import StrawberrySQLAlchemyMapper
strawberry_sqlalchemy_mapper = StrawberrySQLAlchemyMapper()
@strawberry_sqlalchemy_mapper.type(models.Employee)
class Employee:
__exclude__ = ["password_hash"]
@strawberry_sqlalchemy_mapper.type(models.Department)
class Department:
pass
@strawberry.type
class Query:
@strawberry.field
def departments(self):
# This db.session was created with sqlalchemy.orm.sessionmaker(...)
return db.session.scalars(select(models.Department)).all()
# context is expected to have an instance of StrawberrySQLAlchemyLoader
class CustomGraphQLView(GraphQLView):
def get_context(self):
return {
"sqlalchemy_loader": StrawberrySQLAlchemyLoader(bind=YOUR_SESSION),
}
# call finalize() before using the schema:
# (note that models that are related to models that are in the schema
# are automatically mapped at this stage -- e.g., Department is mapped
# because employee.department is a relationshp to Department)
strawberry_sqlalchemy_mapper.finalize()
# only needed if you have polymorphic types
additional_types = list(strawberry_sqlalchemy_mapper.mapped_types.values())
schema = strawberry.Schema(
query=Query,
mutation=Mutation,
extensions=extensions,
types=additional_types,
)
# You can now query, e.g.:
"""
query {
departments {
id
name
employees {
edge {
node {
id
name
department {
# Just an example of nested relationships
id
name
}
}
}
}
}
}
"""
```
### Type Inheritance
You can inherit fields from other mapped types using standard Python class inheritance.
- Fields from the parent type (e.g., ApiA) are inherited by the child (e.g., ApiB).
- The `__exclude__` setting applies to inherited fields.
- If both SQLAlchemy models define the same field name, the field from the model inside `.type(...)` takes precedence.
- Declaring a field manually in the mapped type overrides everything else.
```python
class ModelA(base):
__tablename__ = "a"
id = Column(String, primary_key=True)
common_field = Column(String(50))
class ModelB(base):
__tablename__ = "b"
id = Column(String, primary_key=True)
common_field = Column(Integer) # Conflicting field
extra_field = Column(String(50))
@mapper.type(ModelA)
class ApiA:
__exclude__ = ["id"] # This field will be excluded in ApiA (and its children)
@mapper.type(ModelB)
class ApiB(ApiA):
# Inherits fields from ApiA, except "id"
# "common_field" will come from ModelB, not ModelA, so it will be a Integer
# "extra_field" will be overridden and will be a float now instead of the String type declared in ModelB:
extra_field: float = strawberry.field(name="extraField")
```
## Limitations
### Supported Types
SQLAlchemy Models -> Strawberry Types and Interfaces are expected to have a consistent
(customizable) naming convention. These can be configured by passing `model_to_type_name`
and `model_to_interface_name` when constructing the mapper.
Natively supports the following SQLAlchemy types:
| SQLAlchemy Type | Strawberry Equivalent | Notes |
|-----------------------|---------------------------|------------------------|
| `Integer` | `int` | |
| `Float` | `float` | |
| `BigInteger` | `BigInt` | |
| `Numeric` | `Decimal` | |
| `DateTime` | `datetime` | |
| `Date` | `date` | |
| `Time` | `time` | |
| `String` | `str` | |
| `Text` | `str` | |
| `Boolean` | `bool` | |
| `Unicode` | `str` | |
| `UnicodeText` | `str` | |
| `SmallInteger` | `int` | |
| `SQLAlchemyUUID` | `uuid.UUID` | |
| `VARCHAR` | `str` | |
| `ARRAY[T]` | `List[T]` | PostgreSQL array |
| `JSON` | `JSON` | SQLAlchemy JSON |
| `Enum` | `enum.Enum` | The Python enum that the column is mapped to must be decorated with`@strawberry.enum` ([strawberry enum docs][strawberry-enum-docs-url]) |
Additional types can be supported by passing `extra_sqlalchemy_type_to_strawberry_type_map`,
although support for `TypeDecorator` types is untested.
### Association Proxies
Association proxies are expected to be of the form `association_proxy('relationship1', 'relationship2')`,
i.e., both properties are expected to be relationships.
If your `association_proxy` does not follow the expected form, you should add it to `__exclude__` to prevent an exception from being raised.
### Polymorphic Hierarchies
Roots of polymorphic hierarchies **are supported**, but are also expected to be registered via
`strawberry_sqlalchemy_mapper.interface()`, and its concrete type and
its descendants are expected to inherit from the interface:
```python
# models.py
from sqlalchemy import Column
Base = declarative_base()
class Book(Base):
id = Column(UUID, primary_key=True)
class Novel(Book):
pass
class ShortStory(Book):
pass
# in another file
strawberry_sqlalchemy_mapper = StrawberrySQLAlchemyMapper()
@strawberry_sqlalchemy_mapper.interface(models.Book)
class BookInterface:
pass
@strawberry_sqlalchemy_mapper.type(models.Book)
class Book:
pass
@strawberry_sqlalchemy_mapper.type(models.Novel)
class Novel:
pass
@strawberry_sqlalchemy_mapper.type(models.ShortStory)
class ShortStory:
pass
```
## Contributing
We encourage you to contribute to strawberry-sqlalchemy-mapper! Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. Don't forget to give the project a star! Thanks again!
1. Fork the Project
2. Create your Feature Branch (git checkout -b feature)
3. Commit your Changes (git commit -m 'Add some feature')
4. Push to the Branch (git push origin feature)
5. Open a Pull Request
For more details on how to contribute, as well as how to setup the project on your local machine, please refer to [the contributing docs](CONTRIBUTING.rst)
### Prerequisites
This project uses `pre-commit`, please make sure to install it before making any
changes::
pip install pre-commit
cd strawberry-sqlalchemy-mapper
pre-commit install
Don't forget to tell your contributors to also install and use pre-commit.
>💡 Tip: You can also use our DevContainer setup for a fully configured development environment, including pre-commit, Python, PostgreSQL, and all required dependencies. This is the fastest way to get started.
### Installation
```bash
pip install -r requirements.txt
```
Install [PostgreSQL 14+](https://www.postgresql.org/download/)
### Test
```bash
pytest
```
## ⚖️ LICENSE
MIT © [strawberry-sqlalchemy-mapper](LICENSE.txt)
<!-- Badge Links -->
[pypi-badge]: https://img.shields.io/pypi/v/strawberry-sqlalchemy-mapper?color=blue
[pypi-url]: https://pypi.org/project/strawberry-sqlalchemy-mapper/
[python-badge]: https://img.shields.io/pypi/pyversions/strawberry-sqlalchemy-mapper
[downloads-badge]: https://static.pepy.tech/badge/strawberry-sqlalchemy-mapper/month
[downloads-url]: https://pepy.tech/projects/strawberry-sqlalchemy-mapper
[ci-badge]: https://img.shields.io/github/actions/workflow/status/strawberry-graphql/strawberry-sqlalchemy/test.yml?branch=main
[ci-url]: https://github.com/strawberry-graphql/strawberry-sqlalchemy/actions
[coverage-badge]: https://codecov.io/gh/strawberry-graphql/strawberry-sqlalchemy/branch/main/graph/badge.svg
[coverage-url]: https://codecov.io/gh/strawberry-graphql/strawberry-sqlalchemy
[issues-url]: https://github.com/strawberry-graphql/strawberry-sqlalchemy/issues
[discord-badge]: https://img.shields.io/discord/689806334337482765?label=discord&logo=discord&logoColor=white&style=for-the-badge&color=blue
[discord-url]: https://discord.gg/ZkRTEJQ
[strawberry-url]: https://strawberry.rocks/
[strawberry-enum-docs-url]: https://strawberry.rocks/docs/types/enums#enums
Raw data
{
"_id": null,
"home_page": "https://strawberry.rocks/",
"name": "strawberry-sqlalchemy-mapper",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": "graphql, sqlalchemy, strawberry",
"author": "Tim Dumol",
"author_email": "tim@timdumol.com",
"download_url": "https://files.pythonhosted.org/packages/e0/7c/7c6c0beb242280c6f1e5b1fae4af204a9cb57fbaf2266ae6c49fe9075092/strawberry_sqlalchemy_mapper-0.6.4.tar.gz",
"platform": null,
"description": "# Strawberry SQLAlchemy Mapper\n\n\n[![PyPI Version][pypi-badge]][pypi-url]\n![python][python-badge]\n[![Downloads][downloads-badge]][downloads-url]\n[![Test Coverage][coverage-badge]][coverage-url]\n[![CI/CD Status][ci-badge]][ci-url]\n\n[![Discord][discord-badge]][discord-url]\n\nThe simplest way to implement autogenerated [Strawberry][strawberry-url] types for columns and relationships in SQLAlchemy models.\n\n\nInstead of manually listing every column and relationship in a SQLAlchemy model, strawberry-sqlalchemy-mapper\nlets you decorate a class declaration and it will automatically generate the necessary strawberry fields\nfor all columns and relationships (subject to the limitations below) in the given model.\n\n\n- Native support for most of SQLAlchemy's most common types. (See all supported types [here](#supported-types))\n- Extensible to arbitrary custom SQLAlchemy types.\n- Automatic batching of queries, avoiding N+1 queries when getting relationships\n- Support for SQLAlchemy >=1.4.x\n- Lightweight and fast.\n\n## Table of Contents\n\n- [Getting Started](#getting-started)\n - [Installation](#installation)\n - [Basic Usage](#basic-usage)\n- [Limitations](#limitations)\n - [Supported Types](#supported-types)\n - [Association Proxies](#association-proxies)\n - [Polymorphic Hierarchies](#polymorphic-hierarchies)\n- [Contributing](#contributing)\n- [\u2696\ufe0f LICENSE](#\ufe0f-license)\n\n\n## Getting Started\n\n### Installation\nstrawberry-sqlalchemy-mapper is available on [PyPi](https://pypi.org/project/strawberry-sqlalchemy-mapper/)\n\n```\npip install strawberry-sqlalchemy-mapper\n```\n\n### Basic Usage\n\nFirst, define your sqlalchemy model:\n\n```python\n# models.py\nfrom sqlalchemy import Column, ForeignKey, Integer, String\nfrom sqlalchemy.ext.declarative import declarative_base\nfrom sqlalchemy.orm import relationship\n\nBase = declarative_base()\n\n\nclass Employee(Base):\n __tablename__ = \"employee\"\n id = Column(UUID, primary_key=True)\n name = Column(String, nullable=False)\n password_hash = Column(String, nullable=False)\n department_id = Column(UUID, ForeignKey(\"department.id\"))\n department = relationship(\"Department\", back_populates=\"employees\")\n\n\nclass Department(Base):\n __tablename__ = \"department\"\n id = Column(UUID, primary_key=True)\n name = Column(String, nullable=False)\n employees = relationship(\"Employee\", back_populates=\"department\")\n```\n\nNext, decorate a type with `strawberry_sqlalchemy_mapper.type()`\nto register it as a strawberry type for the given SQLAlchemy model.\nThis will automatically add fields for the model's columns, relationships, association proxies,\nand hybrid properties. For example:\n\n```python\n# In another file\n# ...\nimport strawberry\nfrom strawberry_sqlalchemy_mapper import StrawberrySQLAlchemyMapper\n\nstrawberry_sqlalchemy_mapper = StrawberrySQLAlchemyMapper()\n\n\n@strawberry_sqlalchemy_mapper.type(models.Employee)\nclass Employee:\n __exclude__ = [\"password_hash\"]\n\n\n@strawberry_sqlalchemy_mapper.type(models.Department)\nclass Department:\n pass\n\n\n@strawberry.type\nclass Query:\n @strawberry.field\n def departments(self):\n # This db.session was created with sqlalchemy.orm.sessionmaker(...)\n return db.session.scalars(select(models.Department)).all()\n\n\n# context is expected to have an instance of StrawberrySQLAlchemyLoader\nclass CustomGraphQLView(GraphQLView):\n def get_context(self):\n return {\n \"sqlalchemy_loader\": StrawberrySQLAlchemyLoader(bind=YOUR_SESSION),\n }\n\n\n# call finalize() before using the schema:\n# (note that models that are related to models that are in the schema\n# are automatically mapped at this stage -- e.g., Department is mapped\n# because employee.department is a relationshp to Department)\nstrawberry_sqlalchemy_mapper.finalize()\n# only needed if you have polymorphic types\nadditional_types = list(strawberry_sqlalchemy_mapper.mapped_types.values())\nschema = strawberry.Schema(\n query=Query,\n mutation=Mutation,\n extensions=extensions,\n types=additional_types,\n)\n\n# You can now query, e.g.:\n\"\"\"\nquery {\n departments {\n id\n name\n employees {\n edge {\n node {\n id\n name\n department {\n # Just an example of nested relationships\n id\n name\n }\n }\n }\n }\n }\n}\n\"\"\"\n```\n\n### Type Inheritance\n\nYou can inherit fields from other mapped types using standard Python class inheritance.\n\n- Fields from the parent type (e.g., ApiA) are inherited by the child (e.g., ApiB).\n\n- The `__exclude__` setting applies to inherited fields.\n\n- If both SQLAlchemy models define the same field name, the field from the model inside `.type(...)` takes precedence.\n\n- Declaring a field manually in the mapped type overrides everything else.\n\n```python\nclass ModelA(base):\n __tablename__ = \"a\"\n\n id = Column(String, primary_key=True)\n common_field = Column(String(50))\n\n\nclass ModelB(base):\n __tablename__ = \"b\"\n\n id = Column(String, primary_key=True)\n common_field = Column(Integer) # Conflicting field\n extra_field = Column(String(50))\n\n\n@mapper.type(ModelA)\nclass ApiA:\n __exclude__ = [\"id\"] # This field will be excluded in ApiA (and its children)\n\n\n@mapper.type(ModelB)\nclass ApiB(ApiA):\n # Inherits fields from ApiA, except \"id\"\n # \"common_field\" will come from ModelB, not ModelA, so it will be a Integer\n # \"extra_field\" will be overridden and will be a float now instead of the String type declared in ModelB:\n extra_field: float = strawberry.field(name=\"extraField\")\n```\n## Limitations\n\n### Supported Types\nSQLAlchemy Models -> Strawberry Types and Interfaces are expected to have a consistent\n(customizable) naming convention. These can be configured by passing `model_to_type_name`\nand `model_to_interface_name` when constructing the mapper.\n\nNatively supports the following SQLAlchemy types:\n\n\n| SQLAlchemy Type | Strawberry Equivalent | Notes |\n|-----------------------|---------------------------|------------------------|\n| `Integer` | `int` | |\n| `Float` | `float` | |\n| `BigInteger` | `BigInt` | |\n| `Numeric` | `Decimal` | |\n| `DateTime` | `datetime` | |\n| `Date` | `date` | |\n| `Time` | `time` | |\n| `String` | `str` | |\n| `Text` | `str` | |\n| `Boolean` | `bool` | |\n| `Unicode` | `str` | |\n| `UnicodeText` | `str` | |\n| `SmallInteger` | `int` | |\n| `SQLAlchemyUUID` | `uuid.UUID` | |\n| `VARCHAR` | `str` | |\n| `ARRAY[T]` | `List[T]` | PostgreSQL array |\n| `JSON` | `JSON` | SQLAlchemy JSON |\n| `Enum` | `enum.Enum` | The Python enum that the column is mapped to must be decorated with`@strawberry.enum` ([strawberry enum docs][strawberry-enum-docs-url]) |\n\n\n\nAdditional types can be supported by passing `extra_sqlalchemy_type_to_strawberry_type_map`,\nalthough support for `TypeDecorator` types is untested.\n\n### Association Proxies\n\nAssociation proxies are expected to be of the form `association_proxy('relationship1', 'relationship2')`,\ni.e., both properties are expected to be relationships.\nIf your `association_proxy` does not follow the expected form, you should add it to `__exclude__` to prevent an exception from being raised.\n\n### Polymorphic Hierarchies\n\nRoots of polymorphic hierarchies **are supported**, but are also expected to be registered via\n`strawberry_sqlalchemy_mapper.interface()`, and its concrete type and\nits descendants are expected to inherit from the interface:\n\n```python\n# models.py\nfrom sqlalchemy import Column\n\nBase = declarative_base()\n\n\nclass Book(Base):\n id = Column(UUID, primary_key=True)\n\n\nclass Novel(Book):\n pass\n\n\nclass ShortStory(Book):\n pass\n\n\n# in another file\nstrawberry_sqlalchemy_mapper = StrawberrySQLAlchemyMapper()\n\n\n@strawberry_sqlalchemy_mapper.interface(models.Book)\nclass BookInterface:\n pass\n\n\n@strawberry_sqlalchemy_mapper.type(models.Book)\nclass Book:\n pass\n\n\n@strawberry_sqlalchemy_mapper.type(models.Novel)\nclass Novel:\n pass\n\n\n@strawberry_sqlalchemy_mapper.type(models.ShortStory)\nclass ShortStory:\n pass\n```\n\n## Contributing\n\nWe encourage you to contribute to strawberry-sqlalchemy-mapper! Any contributions you make are greatly appreciated.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. Don't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (git checkout -b feature)\n3. Commit your Changes (git commit -m 'Add some feature')\n4. Push to the Branch (git push origin feature)\n5. Open a Pull Request\n\nFor more details on how to contribute, as well as how to setup the project on your local machine, please refer to [the contributing docs](CONTRIBUTING.rst)\n\n\n### Prerequisites\n\nThis project uses `pre-commit`, please make sure to install it before making any\nchanges::\n\n pip install pre-commit\n cd strawberry-sqlalchemy-mapper\n pre-commit install\n\n\nDon't forget to tell your contributors to also install and use pre-commit.\n\n>\ud83d\udca1 Tip: You can also use our DevContainer setup for a fully configured development environment, including pre-commit, Python, PostgreSQL, and all required dependencies. This is the fastest way to get started.\n\n### Installation\n\n```bash\npip install -r requirements.txt\n```\n\nInstall [PostgreSQL 14+](https://www.postgresql.org/download/)\n\n### Test\n\n```bash\npytest\n```\n\n## \u2696\ufe0f LICENSE\n\nMIT \u00a9 [strawberry-sqlalchemy-mapper](LICENSE.txt)\n\n<!-- Badge Links -->\n[pypi-badge]: https://img.shields.io/pypi/v/strawberry-sqlalchemy-mapper?color=blue\n[pypi-url]: https://pypi.org/project/strawberry-sqlalchemy-mapper/\n[python-badge]: https://img.shields.io/pypi/pyversions/strawberry-sqlalchemy-mapper\n[downloads-badge]: https://static.pepy.tech/badge/strawberry-sqlalchemy-mapper/month\n[downloads-url]: https://pepy.tech/projects/strawberry-sqlalchemy-mapper\n[ci-badge]: https://img.shields.io/github/actions/workflow/status/strawberry-graphql/strawberry-sqlalchemy/test.yml?branch=main\n[ci-url]: https://github.com/strawberry-graphql/strawberry-sqlalchemy/actions\n[coverage-badge]: https://codecov.io/gh/strawberry-graphql/strawberry-sqlalchemy/branch/main/graph/badge.svg\n[coverage-url]: https://codecov.io/gh/strawberry-graphql/strawberry-sqlalchemy\n[issues-url]: https://github.com/strawberry-graphql/strawberry-sqlalchemy/issues\n[discord-badge]: https://img.shields.io/discord/689806334337482765?label=discord&logo=discord&logoColor=white&style=for-the-badge&color=blue\n[discord-url]: https://discord.gg/ZkRTEJQ\n[strawberry-url]: https://strawberry.rocks/\n[strawberry-enum-docs-url]: https://strawberry.rocks/docs/types/enums#enums\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A library for autogenerating Strawberry GraphQL types from SQLAlchemy models.",
"version": "0.6.4",
"project_urls": {
"Changelog": "https://strawberry.rocks/changelog",
"Discord": "https://discord.com/invite/3uQ2PaY",
"Documentation": "https://strawberry.rocks/",
"Homepage": "https://strawberry.rocks/",
"Mastodon": "https://farbun.social/@strawberry",
"Repository": "https://github.com/strawberry-graphql/strawberry-sqlalchemy",
"Sponsor on GitHub": "https://github.com/sponsors/strawberry-graphql",
"Sponsor on Open Collective": "https://opencollective.com/strawberry-graphql",
"Twitter": "https://twitter.com/strawberry_gql"
},
"split_keywords": [
"graphql",
" sqlalchemy",
" strawberry"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d60d09dde12a94b04667d9f933f5796f85464917937e49bd6936495f89fda4a3",
"md5": "4734a27ea017f69ee55047046b6d1490",
"sha256": "357e111645b776954d9fca569fc3b4894827dc21313e2b9245a302168a4fcccb"
},
"downloads": -1,
"filename": "strawberry_sqlalchemy_mapper-0.6.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4734a27ea017f69ee55047046b6d1490",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 25778,
"upload_time": "2025-07-08T19:27:33",
"upload_time_iso_8601": "2025-07-08T19:27:33.427463Z",
"url": "https://files.pythonhosted.org/packages/d6/0d/09dde12a94b04667d9f933f5796f85464917937e49bd6936495f89fda4a3/strawberry_sqlalchemy_mapper-0.6.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e07c7c6c0beb242280c6f1e5b1fae4af204a9cb57fbaf2266ae6c49fe9075092",
"md5": "094d092b022b3abcd45f2c4e0dc69a85",
"sha256": "0a908e7af857bb325c4b03fb9172033c7146931429bde690661a0a99a1adae8a"
},
"downloads": -1,
"filename": "strawberry_sqlalchemy_mapper-0.6.4.tar.gz",
"has_sig": false,
"md5_digest": "094d092b022b3abcd45f2c4e0dc69a85",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 26843,
"upload_time": "2025-07-08T19:27:34",
"upload_time_iso_8601": "2025-07-08T19:27:34.377567Z",
"url": "https://files.pythonhosted.org/packages/e0/7c/7c6c0beb242280c6f1e5b1fae4af204a9cb57fbaf2266ae6c49fe9075092/strawberry_sqlalchemy_mapper-0.6.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-08 19:27:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "strawberry-graphql",
"github_project": "strawberry-sqlalchemy",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "strawberry-sqlalchemy-mapper"
}