Graphene 和 SQLAlchemy:派生自基础对象类型

问题描述

我正在使用 Flask、Graphene、sqlAlchemy 和 graphene-sqlalchemy 构建一个应用程序,其中我实现了以下模型:

class User(db.Model):
    __tablename__ = "user"
    id = Column(Integer,primary_key=True)
    name = Column(Text,nullable=False)
    email = Column(Text,nullable=False)

class BusinessUser(db.Model):
    __tablename__ = "bis_user"
    id = Column(Integer,ForeignKey("user.id"),primary_key=True)
    vatNumber = Column(Text,nullable=False)

class LVUser(db.Model):
    __tablename__ = "lv_user"
    id = Column(Integer,primary_key=True)
    lv_num = Column(Integer,nullable=False)

我的目标是定义三种 GraphQL 类型:

type User {
    id : ID
    name : String
    email : String
}

type BusinessUser {
    id : ID
    name : String
    email : String
    vatNumber : String
}

type LVUser {
    id : ID
    name : String
    email : String
    lvNum : Integer
}

但我正在努力寻找一种高效而优雅的方式来做到这一点。有没有办法让我们说一个“基本”对象类型 User 并在我的基本类型的顶部创建 BusinessUserLVUser 类型,同时提供额外的字段?

解决方法

请阅读Composing Mapped Hierarchies with Mixins,它似乎准确地描述了您正在寻找的场景和解决方案。

但是,由于您有来自其他两个表的 user.id 外键,这一事实暗示了我可以使用 Mapping Class Inheritance Hierarchies 实现的继承,而该策略将取决于您的实际表在数据库级别的设计。