跳转到主要内容

将SQLAlchemy模型转换为Pydantic模型的工具

项目描述

Pydantic-SQLAlchemy

Test Publish Coverage Package version

从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

  • ✨ 添加 poetry-version-plugin,移除 importlib-metadata 依赖。PR #32 by @tiangolo

0.0.8.post1

  • 💚 修复设置GitHub Action以发布Poetry。PR #23 by @tiangolo

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

0.0.5

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 查看哈希值)

上传时间 源代码

构建分发

pydantic_sqlalchemy-0.0.9-py3-none-any.whl (4.5 kB 查看哈希值)

上传时间 Python 3

支持