首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy:创建一个由另一个复合主键组成的复合主键

SQLAlchemy:创建一个由另一个复合主键组成的复合主键
EN

Stack Overflow用户
提问于 2020-10-07 14:27:13
回答 1查看 280关注 0票数 0

在SQLAlchemy中,如何声明由另一个复合主键组成的复合主键?

假设我有这样的模型:

代码语言:javascript
复制
┌────────┐             ┌───────┐            ┌───────┐
| Person |  ── 1,n ──> |  Pet  | ── 1,n ──> |  Toy  |
├--------┤             ├-------┤            ├-------┤
|   id   |             |  age  |            | color | 
|  name  |             └───────┘            └───────┘
└────────┘

一个人可以有多个宠物,一个宠物可以有多个玩具。到目前为止,这很简单。

更难的是,我希望PetToy具有复合主键:

(Person.id, Pet.age)

  • the

  • Person的主键是

  • Person的主键是

  • Pet的主键是,的主键,Toy的主键是(<Pet primary key>, Toy.color)

我挣扎的地方是在Toy的复合主键中使用Toy

以下是我迄今所做的尝试:

代码语言:javascript
复制
class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True, unique=True)
    name = Column(String, unique=True, index=True)


class Pet(Base):
    __tablename__ = 'pet'
    __table_args__ = (PrimaryKeyConstraint('age', 'person_id', name='pet_pk'),)
    age = Column(Integer, default=0)
    person_id = Column(Integer, ForeignKey('person.id'))


class Toy(Base):
    __tablename__ = 'toy'
    __table_args__ = (PrimaryKeyConstraint('color', ???, name='toy_pk'),)
    color = Column(String)

由于Pet的主键是复合主键,我如何在另一个复合主键中使用它?

在我的Toy表中,应该添加一个pet_age列和一个person_id列来构建Pet复合键,这样我就可以这样引用它:

代码语言:javascript
复制
(PrimaryKeyConstraint('color', 'pet_age', 'person_id', name='toy_pk')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 16:33:18

找到它:

  • 我需要在Toy
  • 中声明所有的Pet复合主键,用所有这些字段
  • 创建一个新的复合主键,并声明一个包含多个字段的外键约束:

代码语言:javascript
复制
class Toy(Base):
    __tablename__ = 'toy'
    __table_args__ = (
        PrimaryKeyConstraint('color', 'pet_age', 'person_id', name='toy_pk'),
        ForeignKeyConstraint(['pet_age', 'person_id'], ['pet.age', 'pet.person_id'])
    )
    color = Column(String)
    pet_age = Column(Integer)
    person_id = Column(Integer)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64246193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档