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.10.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.10-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sqltypes-0.1.10.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.10.tar.gz
Algorithm Hash digest
SHA256 e725a6bf73a95092efd47fbb131922513b3cf1923826a0138af4f02d9358515d
MD5 39ce0cedae1e8c95e2326e7673a0d4da
BLAKE2b-256 71f2c5e61e01a37f6a3f3a43c8a1bb939b60ccd73453433c001be2a8aa487386

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqltypes-0.1.10-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.10-py3-none-any.whl
Algorithm Hash digest
SHA256 8eb3554c0eb2e5ab5935120cdbff417a71664897f54d76adfbf9c4da71ee13c9
MD5 1a6556a5d99de9a31f93bde8d7429433
BLAKE2b-256 01a36463ae748af1a36e13bda692bb70025c84f3b9b9071f50d95086db49643f

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