FlaskSQLAlchemy - нужна помощь в разработке отношений один-ко-многим и один-к-одному - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь создать простую базу данных для проекта, но я не могу понять, как создать базу данных с помощью SQlAlchemy.

Идея такова: есть команды, работающие над отдельными проекты, и у каждой команды есть наставник, но наставник не обязательно является частью команды.

Насколько я понимаю, отношение «команда-пользователь» является отношением «один ко многим», то есть я должен поместить внешний ключ в дочернюю таблицу (таблица User) и указать relationship() на родительской таблице (Team таблица). Но я не понимаю, отношения это один-ко-многим или многие-к-одному.

И отношения между командой и репетитором должны быть отношениями один к одному, поэтому я должен поместите relationship() в родительскую таблицу и внешний ключ в дочернюю таблицу. Но еще раз, я не могу понять, что такое родительская таблица и что такое дочерняя таблица в моем сценарии.

И, скажем, если бы я хотел получить доступ к команде, в которой находится конкретный пользователь, и к репетитору этой команды, например alex.team.tutor.id, я должен был бы определить relationship() в таблице преподавателей с помощью backref='tutor' или сделать это наоборот?


class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    vk_uid = db.Column(db.Integer, index=True, nullable=True)
    # team_id = db.Column(db.Integer, db.ForeignKey('team.id'), nullable=True)
    is_tutor = db.Column(db.Boolean, default=False)
    is_admin = db.Column(db.Boolean, default=False)



class Team(db.Model):
    __tablename__ = 'team'
    id = db.Column(db.Integer, primary_key=True)

    members = db.relationship(
        'User',
        backref='team',
        lazy='dynamic'
    )

    # tutor = db.relationship('Tutor', backref='team', uselist=False)
    tutor_id = db.Column(db.Integer, db.ForeignKey('tutor.id'))


class Tutor(db.Model):
    __tablename__ = 'tutor'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    team_id = db.Column(db.Integer, db.ForeignKey('team.id'))
    email = db.Column(db.Text)

...