相同的两个模型之间的一对多和一对一关系
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'))
我有一个 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'))