2017-12-23 6 views
-2

에 속하지 않는 레코드를 반환하고 난 2 개 클래스가 : 관계플라스크-SQLAlchemy의은 - 내가 플라스크 SQLAlchemy의 함께 일하고 특정 관계

class Players(db.model): 
    __tablename__ = 'players' 
    id = db.Column(db.Integer, , nullable=False, autoincrement=True, primary_key=True) 
    name = db.Column(db.String(45), nullable=False) 
    teams = db.Column(db.Integer, ForeignKey("teams.id"), nullable=False) 
    db.relationship('Teams', 
         secondary=player_has_teams, 
         back_populates='teams') 

class Teams(db.model): 
    __tablename__ = 'team' 
    id = db.Column(db.Integer, , nullable=False, autoincrement=True, primary_key=True) 
    name = db.Column(db.String(45), nullable=False) 
    db.relationship('Players',secondary=player_has_teams,back_populates='players') 

과 한 테이블 :

player_has_teams = db.Table('player_has_teams ', db.metadata, 
         db.Column('player_id', db.Integer, ForeignKey('player.id')), 
         db.Column('team_id', db.Integer, ForeignKey('team.id')) 
         ) 

관계는 많은 많은입니다 (모든 플레이어가 많은 팀을 가질 수 있고 모든 팀은 많은 선수가) 내가 쿼리 할 수 ​​있습니다 팀의 선수를 취할

:

,536를
team = db.session.query(Teams).options(joinedload('players',innerjoin=True).filter(Teams.id == 1).first() 

그래서 team.players를 입력하면이 팀의 모든 선수가 나에게 돌아갑니다. 내 문제는 :

한 팀에 플레이어를 추가하고 싶습니다.이 팀에는 일부 플레이어가있을 수 있습니다.이 팀에 속한 플레이어가 아닌 모든 플레이어를 반환하는 쿼리를 원합니다. 어떤 제안이 있습니까?

+0

이 방법에 대한 https://stackoverflow.com/questions/21633115/return-row-only-if-value-doesnt-exist?lq=1를 참조하십시오 일반적인 SQL로 해보십시오. SQLAlchemy 구문으로 변환하는 것이 어렵지 않아야합니다. – Barmar

+0

해결책을 시도 했습니까? – roy

답변

-1

세션에서 team.id에 액세스 할 수 있습니다.
players = db.session.query(Players).filter_by(Player.team.id != Team.id).all()

업데이트 :
players = [p for p in Player.query.all() if the_team.id not in [team.id for team in p.teams]]