Организация таблицы базы данных с колбой-sqlalchemy - PullRequest
0 голосов
/ 14 февраля 2019

Я настраиваю модели базы данных, и мне нужно установить отношения между ними.Однако ребенок всегда создается первым, и возникают проблемы, поскольку внешний ключ для него еще не существует.

У меня есть 3 таблицы: пользователь, команда и игроки.Пользователь может иметь много команд, и одна команда может иметь много игроков.Это все сработало бы, если бы я сначала создал User, затем команду для него и затем добавил в него игроков.Потому что все это отношения один-ко-многим.

Однако у меня всегда будет команда и ее игроки.Только когда люди действительно регистрируются на моей веб-странице и вводят идентификатор своей команды. Пользователь должен быть создан и связан с командой, которая имеет этот идентификатор.

Это мой код на данный момент, но он не работает по указанным причинам..

class User(UserMixin, db.Model):
    __tablename__ = 'user'
    user_id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(64), nullable=False)
    email = db.Column(db.String(64), nullable=False)
    password_hash = db.Column(db.String(128), nullable = False)
    token = db.Column(db.String(64), unique=True, nullable = True) 
    secret_token = db.Column(db.String(64),unique=True, nullable = True)
    teams = db.relationship("Team", backref="user", lazy=True)

    def add_team(self,team_id,team_name,user_name,youthteam_id,user_id):
        t = Team(team_id = team_id,team_name = team_name,user_name = user_name,youthteam_id = youthteam_id,user_id = self.user_id)
        db.session.add(t)
        db.session.commit()

    def __repr__(self):
        return '<User {}>'.format(self.username)

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

class Team(db.Model):
    __tablename__ = "team"
    team_id = db.Column(db.Integer, primary_key=True)
    team_name = db.Column(db.String, nullable=False)
    user_name = db.Column(db.String, nullable=False)
    youthteam_id = db.Column(db.Integer, nullable=False)
    players = db.relationship("Player", backref="team", lazy=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.user_id"), nullable=False)


    def add_player(self,youthplayer_id, youth_name, youth_surname, age, promoted_in, speciality, last_rating,last_pos):
        p = Player(youthplayer_id = youthplayer_id,youth_name = youth_name,youth_surname = youth_surname,age = age,promoted_in = promoted_in,speciality = speciality,last_rating= last_rating,last_pos = last_pos,team_id = self.team_id)
        db.session.add(p)
        db.session.commit()

class Player(db.Model):
    __tablename__ = "player"
    youthplayer_id = db.Column(db.Integer, primary_key=True)
    youth_name = db.Column(db.String, nullable=False)
    youth_surname = db.Column(db.String, nullable=False)
    age = db.Column(db.Numeric, nullable=False)
    promoted_in = db.Column(db.Integer, nullable=False)
    speciality = db.Column(db.String, nullable=False)
    last_rating = db.Column(db.Numeric, nullable=False)
    last_pos = db.Column(db.String, nullable=False)
    team_id = db.Column(db.Integer, db.ForeignKey("team.team_id"), nullable=False)

Итак, чего бы я хотел добиться, так это того, чтобы в базе данных была команда Alpha, и к ней подключены player1 и player2.Когда фактический человек регистрируется на моей странице, он вводит свою электронную почту, имя пользователя и пароль.Через ouath я получаю его user_id с другой страницы.Затем я включаю пользователя в свою таблицу пользователей и через этот user_id он соединяется со своей командой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...