Skip to main content

Tools to convert SQLAlchemy models to Pydantic models

Project description

Tools to generate Pydantic models from SQLAlchemy models.

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.6.tar.gz (2.9 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: sqlalchemy_to_pydantic-0.0.6.tar.gz
  • Upload date:
  • Size: 2.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.12 Linux/5.15.0-83-generic

File hashes

Hashes for sqlalchemy_to_pydantic-0.0.6.tar.gz
Algorithm Hash digest
SHA256 41b49dab022d2a6d109970a1f5aa603c982004d066b7a3c8dc142965ff6977a3
MD5 280e76949bc2d4d711ebe21c7ff029cb
BLAKE2b-256 0d80a063f7a65f766ee2e07c89436c7a9cf3cb944f571f8a2229cbe28272a5d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlalchemy_to_pydantic-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 76ddd307addeb3d6b60f1291b92a5835e7ace4f04f34f35bea5ffab64bc2d0da
MD5 650065b272a3892aaa93fb3f47536e44
BLAKE2b-256 9b8c85869dc798dd242eac3097e6be1bbaf921b286b8313a15b6d3f6ef27773f

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