ゲームには、PlayerとAllianceの2つの単純なエンティティがあり、同盟名を持つ同じ国のすべてのユーザーをフェッチする必要があります(同盟に名前がある場合は、同盟名はnullになります)。
class Base(object):
def __tablename__(self):
return self.__name__.lower()
id = Column(Integer, primary_key=True, nullable=False)
class PlayerModel(Base):
__tablename__ = 'players'
alliances_id = Column(Integer, nullable=True)
username = Column(String(30), nullable=False)
nation = Column(String(20), nullable=False)
score = Column(String(20), default=0)
class AllianceModel(Base):
__tablename__ = 'alliances'
name = Column(String(50), nullable=False)
nation = Column(String(20), nullable=False)
//query
for player in session.query(PlayerModel).filter(PlayerModel.nation.like(nation)):
alliance =session.query(AllianceModel).filter(AllianceModel.id==player.alliance_id).first()
result.append({'username':player.username, 'alliance':alliance.name})
これを1つのクエリにのみ接続できますか?(外部キーがある場合はjoinを使用することは知っていますが、プレーヤーはすべての同盟から外れる可能性があり、alliances_idはnullになる可能性があります)。