0

Для базы данных, с которой я экспериментирую, мне было предложено изменить соотношение между и Team от M2M до двух отношений 1 к 1. Логика: для каждого заданного матча есть только две команды.SQLAlchemy: Двойное отношение отношения «один-к-одному»

Мне тяжело обворачивать голову, как реализовать это в моем models.py; вот что я до сих пор (в сокращенном виде):

class Match(db.Model): 
    id = db.Column(db.String, primary_key=True) 


    # One to One x2 with Team 
    hometeam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    awayteam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    team = db.relationship("Team", back_populates="match") 

    hoemteam_goals = db.Column(db.Integer, nullable=False) 
    awayteam_goals = db.Column(db.Integer, nullable=False) 

class Team(db.Model): 

    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String, nullable=False) 
    points = db.Column(db.Integer) 
    matches_played = db.Column(db.Integer) 

    # Many side of M2M With Match 
    match = relationship("Match", back_populates="team", uselist=False) 

Там, кажется, что-то здесь отсутствует, особенно в декларации relationship с в Match сторону.

ответ

0

Решение состоит в том, чтобы добавить ссылку отношения для каждого из них в одном отношении и использовать foreign_keys аргумент relationship, чтобы указать, какой идентификатор использовать:

class Match(db.Model): 
    id = db.Column(db.String, primary_key=True) 

    # One to One x2 with Team 
    hometeam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    awayteam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    hometeam = db.relationship("Team", foreign_keys=[hometeam_id]) 
    awayteam = db.relationship("Team", foreign_keys=[awayteam_id]) 

class Team(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String, nullable=False) 
    points = db.Column(db.Integer) 
    matches_played = db.Column(db.Integer) 

    # No backreferences, use a query to figure that out 

Я удалил match отношения, как это здесь не полезно, ИМХО.

Соответствующая документация находится здесь: http://docs.sqlalchemy.org/en/latest/orm/join_conditions.html#relationship-foreign-keys