Python 同一两个模型之间的一对多和一对一关系
我有一个Python 同一两个模型之间的一对多和一对一关系,python,python-3.x,sqlalchemy,relationship,Python,Python 3.x,Sqlalchemy,Relationship,我有一个玩家职业,每个玩家拥有X个角色实例: class Player(Model): characters = relationship('Character', back_populates='owner') class Character(Model): owner = relationship('Player', back_populates='characters') owner_id = Column('player_id', Integer, Foreig
玩家
职业,每个玩家拥有X个角色
实例:
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'))
但除此之外,每个人都有一个他目前控制的角色。这意味着每个玩家都有多个自己的角色,但其中只有一个是活动的,所以我需要能够保持在一个单独的值左右
如何在现有的一对多关系旁边添加一对一关系?如果在玩家表中再添加一列,使玩家保持当前角色,该怎么办。您可以在需要时进行更改:
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)
若你们在玩家表中增加一列,让玩家保持当前角色,会怎么样。您可以在需要时进行更改:
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为
关系()
提供了一个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'))
显然,SQLAlchemy为
关系()
提供了一个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'))
再添加一个布尔列名作为活动列名,其值为True或False。并使播放器和活动id与字符唯一。再添加一个布尔列名作为活动,其值为True或False。并使玩家和活动id与角色保持唯一性。