相同的两个模型之间的一对多和一对一关系

One-to-many and one-to-one relationships between the same two models

我有一个 Player class 并且每个玩家拥有 X 数量的 Character 个实例:

class Player(Model):
    characters = relationship('Character', back_populates='owner')

class Character(Model):
    owner = relationship('Player', back_populates='characters')
    owner_id = Column('player_id', Integer, ForeignKey('player.id'))

但除此之外,每个人都有一个他当前正在控制的角色。这意味着每个玩家都有自己的多个角色,但其中只有一个处于活动状态,因此我需要能够将其保存在一个单独的值左右。

如何在现有的一对多关系旁边添加一对一关系?

如果您向 Player table 添加一列以保持玩家当前角色,会怎样?您可以在需要时更改它:

class Player(Model):
    characters = relationship('Character', back_populates='owner')
    current_character = Column('character_id', Integer, ForeignKey('character.id'))
    def refresh(self, id):
        c_id = session.query(Character).filter(character.id == id)
        if c_id:
            self.current_character = c_id.id
            session.add(self)

显然 SQLAlchemy 有 relationship()uselist=False 选项,我刚刚结束使用它...

class Player(Model):
    character = relationship('Character', uselist=False, back_populates='owner')
    characters = relationship('Character', back_populates='owner')

class Character(Model):
    owner = relationship('Player', back_populates='characters')
    owner_id = Column('player_id', Integer, ForeignKey('player.id'))