将SQLAlchemy模型转换为Pydantic模型的工具
项目描述
Pydantic-SQLAlchemy
从SQLAlchemy模型生成Pydantic模型的工具。
仍然处于实验阶段。
如何使用
快速示例
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},
        ],
    }
发布说明
最新更改
0.0.9
0.0.8.post1
0.0.8
- ⬆️ 将 importlib-metadata升级到 3.0.0。PR #22 by @tiangolo。
- 👷 添加GitHub Action最新更改。PR #20 by @tiangolo。
- 💚 修复GitHub Actions Poetry设置。PR #21 by @tiangolo。
0.0.7
- 更新 importlib-metadata的要求以支持最新版本2.0.0。PR #11。
0.0.6
- 添加对SQLAlchemy扩展类型(如sqlalchemy-utc: UtcDateTime)的支持。PR #9。
0.0.5
- 在检查Python类型之前排除列。PR #5 by @ZachMyers3。
0.0.4
- 不要在Pydantic模型中包含SQLAlchemy默认值。PR #4。
0.0.3
- 添加对 exclude的支持,以从Pydantic模型中排除列。PR #3。
- 添加对覆盖 Pydantic config的支持。由 #1 的 @pyropy 提交。
- 添加 GitHub Actions 的 CI。PR #2。
许可证
本项目采用 MIT 许可协议。
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
         pydantic-sqlalchemy-0.0.9.tar.gz  (4.6 kB 查看哈希值)