Skip to main content

No project description provided

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

Uploaded Source

Built Distribution

sqlalchemy_to_pydantic-0.0.7-py3-none-any.whl (3.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sqlalchemy_to_pydantic-0.0.7.tar.gz
  • Upload date:
  • Size: 2.8 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.7.tar.gz
Algorithm Hash digest
SHA256 d68ae56260bd67b17129595c23125ee07230af1f216e7583cf51b3e5347d69cf
MD5 4a7821f907a5f70790ebddfabbedb16d
BLAKE2b-256 c31869f6467469d6f50a95365ff883c7380efd4ba6d383a2e9992783224e3dcf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqlalchemy_to_pydantic-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 545c4cc70af5c44f6637dcc0f10ae0265acdf0f463d8c27dafd2b5ffb45a5743
MD5 fe0789325ccf302b1f3f9cd9f2ccaf43
BLAKE2b-256 c821e64a09a951df9985457cc6df765b50a08cf941eb5a014e5515dec5c759be

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