Skip to main content

Custom types for SQLModel/SQLalchemy

Project description

SQL Types

Custom type decorators for SQLModel/SQLAlchemy with Pydantic validation

Installation

pip install sqltypes

Quick Start

from typing import Sequence
from pydantic import BaseModel
from sqlmodel import Field, SQLModel
from sqltypes import ValidatedJSON, SpaceDelimitedList

class User(BaseModel):
    name: str
    age: int

class Article(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    tags: Sequence[str] = Field(sa_type=SpaceDelimitedList)
    author: User = Field(sa_type=ValidatedJSON(User))

Available Types

ValidatedJSON(T, name?)

Stores any Pydantic model or complex type as JSON with automatic validation.

config: Config = Field(sa_type=ValidatedJSON(Config))

SpaceDelimitedList

Stores sequences as space-delimited strings.

tags: Sequence[str] = Field(sa_type=SpaceDelimitedList)
# Database: "python sql database"
# Python: ["python", "sql", "database"]

ValidatedStr(LiteralType)

Validates strings against Pydantic literal types.

from typing import Literal
Status = Literal["pending", "active", "completed"]
status: Status = Field(sa_type=ValidatedStr(Status))

Custom Types

Use CustomTypeMeta to create your own types:

from sqltypes import CustomTypeMeta
from sqlalchemy.types import String

CommaSeparatedList = CustomTypeMeta(
    'CommaSeparatedList',
    (), {},
    Impl=String,
    dump=lambda lst: ','.join(lst),
    parse=lambda s: s.split(',')
)

Or use CustomStringMeta for string-based types:

from sqltypes import CustomStringMeta

class CommaSeparatedList(metaclass=CustomStringMeta,
                          dump=lambda lst: ','.join(lst),
                          parse=lambda s: s.split(',')):
    ...

Links

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

sqltypes-0.1.7.tar.gz (3.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqltypes-0.1.7-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

Details for the file sqltypes-0.1.7.tar.gz.

File metadata

  • Download URL: sqltypes-0.1.7.tar.gz
  • Upload date:
  • Size: 3.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.10

File hashes

Hashes for sqltypes-0.1.7.tar.gz
Algorithm Hash digest
SHA256 caf721d13a6ecadab34effc6ac1a6436888e8b8feb0b840aa58be1f799ce8c02
MD5 5acb55cbbeb2fa6833d3d045b92a422d
BLAKE2b-256 1158938ae5fc92b67d28c817dc26c2dc41b3250ec2a3d5f7caa14cf9c8e1dfba

See more details on using hashes here.

File details

Details for the file sqltypes-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: sqltypes-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 4.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.10

File hashes

Hashes for sqltypes-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 13c3a6c71e8ee8c5ffd8ed77ba6d092070db39cd9d285719052b91c9181b3c3d
MD5 640f80b9a0c1838dc3fedef072c852f6
BLAKE2b-256 6ab9f2b45b08694b90435467c4b6bf528ee45cfb273f5369d88e9b3ec07eb1de

See more details on using hashes here.

Supported by

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