Python Forum
Critique my code please - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: General (https://python-forum.io/forum-1.html)
+--- Forum: Code sharing (https://python-forum.io/forum-5.html)
+--- Thread: Critique my code please (/thread-20297.html)



Critique my code please - johnhedge - Aug-04-2019

Hi List,
I'm learning Python, flask and SQLite with flask-sqlalchemy.
I've built my tables and tried to set up the relationships.
I'd be pleased if someone would take a look and let me know if and how I've gone wrong.
TIA
John

models.py

from datetime import datetime
from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    players = db.relationship('Players')

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

class Players(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    initials = db.Column(db.String(5))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    cube = db.relationship('Cube')
    score = db.relationship('Score')

    def __repr__(self):
        return '<Players {}>'.format(self.initials)

class Position(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    box = db.Column(db.String(3))
    capt = db.Column(db.String(4))
    crew1 = db.Column(db.String(5))
    crew2 = db.Column(db.String(5))
    crew3 = db.Column(db.String(5))
    crew4 = db.Column(db.String(5))
    crew5 = db.Column(db.String(5))
    game = db.relationship('Game')

    def __repr__(self):
        return '<Position {} {} {} {} {} {} {}>'.format(self.box, self.capt, self.crew1, self.crew2, self.crew3, self.crew4, self.crew5)

class Game(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    position_id = db.Column(db.Integer, db.ForeignKey('position.id'))
    position = db.relationship('Position')
    cube = db.relationship('Cube')
    action = db.relationship('Action')
    score = db.relationship('Score')

    def __repr__(self):
        return '<Game {}>'.format(self.id)

class Cube(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cubevalue = db.Column(db.Integer(3))
    player_id = db.Column(db.Integer, db.ForeignKey('player.id'))
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'))
    action = db.relationship('Action')

    def __repr__(self):
        return '<Cube {}>'.format(self.cubevalue)

class Action(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    action = db.Column(db.Integer(1))
    offerfrom = db.Column(db.String(3))
    offerto = db.Column(db.String(3))
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'))
    cube_id = db.Column(db.Integer, db.ForeignKey('cube.id'))
    cube = db.relationship('Cube')

    def __repr__(self):
        return '<Action {} {} {}>'.format(self.action, self.offerfrom, self.offerto)

class Score(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    value = db.Column(db.Integer(3))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'))
    player_id = db.Column(db.Integer, db.ForeignKey('player.id'))
    game = db.relationship('Game')

    def __repr__(self):
        return '<Action {}>'.format(self.value)

class Location(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    town = db.Column(db.String(20))
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'))
    game = db.relationship('Game')

    def __repr__(self):
        return '<Action {}>'.format(self.town)