Skip to main content

Tools to convert SQLAlchemy models to Pydantic models

Project description

Tools to generate Pydantic models from SQLAlchemy models.

Source Code forked from tiangolo/pydantic-sqlalchemy

Only support pydantic V2

How to use

Quick example:

from typing import List

from sqlalchemy import Column, ForeignKey, Integer, String, create_engine
from sqlalchemy.orm import Session, declarative_base, relationship, sessionmaker

from sqlalchemy_to_pydantic import sqlalchemy_to_pydantic

Base = declarative_base()

engine = create_engine("sqlite://")


class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    nickname = Column(String)

    addresses = relationship(
        "Address", back_populates="user", cascade="all, delete, delete-orphan"
    )


class Address(Base):
    __tablename__ = "addresses"
    id = Column(Integer, primary_key=True)
    email_address = Column(String, nullable=False)
    user_id = Column(Integer, ForeignKey("users.id"))

    user = relationship("User", back_populates="addresses")


PydanticUser = sqlalchemy_to_pydantic(User)
PydanticAddress = sqlalchemy_to_pydantic(Address)


class PydanticUserWithAddresses(PydanticUser):
    addresses: List[PydanticAddress] = []


Base.metadata.create_all(engine)


LocalSession = sessionmaker(bind=engine)

db: Session = LocalSession()

ed_user = User(name="ed", fullname="Ed Jones", nickname="edsnickname")

address = Address(email_address="ed@example.com")
address2 = Address(email_address="eddy@example.com")
ed_user.addresses = [address, address2]
db.add(ed_user)
db.commit()


def test_pydantic_sqlalchemy():
    user = db.query(User).first()
    pydantic_user = PydanticUser.model_validate(user)
    data = pydantic_user.model_dump()
    assert data == {
        "fullname": "Ed Jones",
        "id": 1,
        "name": "ed",
        "nickname": "edsnickname",
    }
    pydantic_user_with_addresses = PydanticUserWithAddresses.model_validate(user)
    data = pydantic_user_with_addresses.model_dump()
    assert data == {
        "fullname": "Ed Jones",
        "id": 1,
        "name": "ed",
        "nickname": "edsnickname",
        "addresses": [
            {"email_address": "ed@example.com", "id": 1, "user_id": 1},
            {"email_address": "eddy@example.com", "id": 2, "user_id": 1},
        ],
    }

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

sqlalchemy_to_pydantic-0.0.8.tar.gz (2.9 kB view details)

Uploaded Source

Built Distribution

sqlalchemy_to_pydantic-0.0.8-py3-none-any.whl (3.6 kB view details)

Uploaded Python 3

File details

Details for the file sqlalchemy_to_pydantic-0.0.8.tar.gz.

File metadata

  • Download URL: sqlalchemy_to_pydantic-0.0.8.tar.gz
  • Upload date:
  • Size: 2.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/3.10.0-1160.24.1.el7.x86_64

File hashes

Hashes for sqlalchemy_to_pydantic-0.0.8.tar.gz
Algorithm Hash digest
SHA256 7af94ecd04c3ca1243975bba5e8e2b2e3928faf9f5ad98a555b0a1b90eec344e
MD5 2479bbff7dc584c9bd8f0f281ec6eee4
BLAKE2b-256 274e0fde8a96fdefcf5b3d8f13eabadc05a89a0be70c2531477e2f80f2a56163

See more details on using hashes here.

File details

Details for the file sqlalchemy_to_pydantic-0.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlalchemy_to_pydantic-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 e2b13b793b983cc43ec2291bd0dadc731c278017814b98140df8f1c468c4f837
MD5 40a9a10be0cbd3b585fb071bbcbbc525
BLAKE2b-256 069c0f87dd64e2dc3228ca8593d6ef0be3ab8484500cb87eb9c051c0ecf65840

See more details on using hashes here.

Supported by

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