python - 石墨烯和 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, 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
创建BusinessUser
和类型,同时提供额外的字段?LVUser
解决方案
请阅读Composing Mapped Hierarchies with Mixins,它似乎准确地描述了您正在寻找的场景和解决方案。
但是,从其他两个表具有外键这一事实user.id
暗示我可以使用Mapping Class Inheritance Hierarchies实现继承,而该策略将取决于您在数据库级别的实际表的设计方式。
推荐阅读
- excel - 有选择地复制和粘贴具有给定条件的行
- javascript - 如何从屏幕下方获取 Reqid?
- c# - GoogleWebAuthorizationBroker.AuthorizeAsync 有时会因 ServerException 崩溃:“网络流读取请求行意外结束。”
- python - 在 kivy 中使用自定义字体
- java - 使 String 输入成为对象实例
- visual-studio - Visual Studio 版本无法识别 Typescript 文件更改,并且认为所有内容都是最新的
- ms-access - MS Access AcDialog 隐藏表单
- css - 当鼠标位于页面上的任何位置时,是否有 CSS 方法来滚动 div?
- javascript - 链接到 id 但导航栏挡住了
- ruby-on-rails - 如何知道某个项目或对象是否正在使用 Rails 中的模型