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
Built Distribution
Close
Hashes for sqlalchemy_to_pydantic-0.0.8.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7af94ecd04c3ca1243975bba5e8e2b2e3928faf9f5ad98a555b0a1b90eec344e |
|
MD5 | 2479bbff7dc584c9bd8f0f281ec6eee4 |
|
BLAKE2b-256 | 274e0fde8a96fdefcf5b3d8f13eabadc05a89a0be70c2531477e2f80f2a56163 |
Close
Hashes for sqlalchemy_to_pydantic-0.0.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e2b13b793b983cc43ec2291bd0dadc731c278017814b98140df8f1c468c4f837 |
|
MD5 | 40a9a10be0cbd3b585fb071bbcbbc525 |
|
BLAKE2b-256 | 069c0f87dd64e2dc3228ca8593d6ef0be3ab8484500cb87eb9c051c0ecf65840 |