Tools to convert SQLAlchemy models to Pydantic models
Project description
Pydantic-SQLAlchemy
Tools to generate Pydantic models from SQLAlchemy models.
Still experimental.
How to use
Quick example:
from typing import List
from pydantic_sqlalchemy import sqlalchemy_to_pydantic
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 = 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.from_orm(user)
data = pydantic_user.dict()
assert data == {
"fullname": "Ed Jones",
"id": 1,
"name": "ed",
"nickname": "edsnickname",
}
pydantic_user_with_addresses = PydanticUserWithAddresses.from_orm(user)
data = pydantic_user_with_addresses.dict()
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},
],
}
Release Notes
Latest Changes
0.0.9
0.0.8.post1
0.0.8
- ⬆️ Upgrade
importlib-metadata
to 3.0.0. PR #22 by @tiangolo. - 👷 Add GitHub Action latest-changes. PR #20 by @tiangolo.
- 💚 Fix GitHub Actions Poetry setup. PR #21 by @tiangolo.
0.0.7
- Update requirements of
importlib-metadata
to support the latest version2.0.0
. PR #11.
0.0.6
- Add support for SQLAlchemy extended types like sqlalchemy-utc: UtcDateTime. PR #9.
0.0.5
- Exclude columns before checking their Python types. PR #5 by @ZachMyers3.
0.0.4
- Do not include SQLAlchemy defaults in Pydantic models. PR #4.
0.0.3
- Add support for
exclude
to exclude columns from Pydantic model. PR #3. - Add support for overriding the Pydantic
config
. PR #1 by @pyropy. - Add CI with GitHub Actions. PR #2.
License
This project is licensed under the terms of the MIT license.
Project details
Release history Release notifications | RSS feed
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 pydantic-sqlalchemy-0.0.9.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 82035d4b3f8019b2e3f070b7ce3f764a30ada03b632c1b5df54dd4c49438de6a |
|
MD5 | d4748f92a38b7514728c77a82d0b1c0d |
|
BLAKE2b-256 | a492a763ab9e19a4f1dc494d3d0577c4074e295c33a89aebd1aa7b0bf20bfb88 |
Close
Hashes for pydantic_sqlalchemy-0.0.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b8e3df9dc282d071478d7e5f7aeda8db5356c86c8ba68cd1a1293ead2a3cea8 |
|
MD5 | 2f9505cd9652ddd85e9ea837aa17f8d5 |
|
BLAKE2b-256 | 21bc13a381c660ef0f7cc968317c3123880c3f972355244a8b547195814d498a |