使用flask-sqlalchemy

时间:2019-02-14 13:43:49

标签: database python-3.x flask-sqlalchemy

我正在建立数据库模型,我需要在它们之间建立一对多的关系。但是,始终总是首先创建孩子,并且由于尚不存在用于该孩子的外键,因此会引起问题。

我有3张桌子,用户,团队和玩家。 用户可以有很多团队,一个团队可以有很多玩家。如果我先创建“用户”,然后为它组队,然后向其中添加玩家,这一切都会奏效。因为所有这些都是一对多的关系。

但是,我将永远拥有的是团队及其玩家。 仅当人们实际在我的网页上注册并输入其团队ID时,才需要创建该用户并将其与具有该ID的团队关联。

这是我现在的代码,但是由于提到的原因,它无法正常工作。

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已连接到该数据库。当实际的人在我的页面上注册时,他输入他的电子邮件,用户名和密码。通过求生,我从另一个页面获得了他的user_id。然后,在用户表中创建用户,并通过该user_id将其与他的团队联系起来。

0 个答案:

没有答案