Skip to content

selobu/pyd-sqa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pyd-sqa

Pydantic-SQLAlchemy

Test Publish Coverage Package version

Tools to generate Pydantic models from SQLAlchemy models, forked from pydantic-sqlalchemy

How to use

Quick example:

from typing import List from pyd_sqa import pyd_sqa from sqlalchemy import Column, ForeignKey, Integer, String, create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import Session, relationship, sessionmaker Base = declarative_base() engine = create_engine("sqlite://", echo=True) 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 = pyd_sqa(User) PydanticAddress = pyd_sqa(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_pyd_sqa(): 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}, ], }

About

pydantic sqlalchemy model coverter

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors