【问题标题】:Graphene and SQLAlchemy: derivate from a base object type石墨烯和 SQLAlchemy:派生自基础对象类型
【发布时间】:2021-07-11 21:56:36
【问题描述】:

我正在使用 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, ForeignKey("user.id"), 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 类型,同时提供额外的字段?

【问题讨论】:

    标签: python sqlalchemy graphql graphene-python graphene-sqlalchemy


    【解决方案1】:

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

    但是,从其他两个表到 user.id 的外键这一事实暗示我可以使用 Mapping Class Inheritance Hierarchies 实现继承,而策略将取决于数据库级别的实际表的设计方式.

    【讨论】:

    • 谢谢,这是正确的!如您提供的链接中所述,我使用继承解决了我的问题。
    猜你喜欢
    • 2018-06-28
    • 2018-07-26
    • 2017-05-11
    • 2021-07-08
    • 2017-08-25
    • 2020-02-25
    • 2017-11-02
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多