class Concerts(db.Model): __tablename__ = 'concerts' band_name = db.Column(db.String, db.ForeignKey('bands.name'), nullable=False) place_name = db.Column(db.String, nullable=False) place_city = db.Column(db.String, nullable=False) db.ForeignKeyConstraint([place_name, place_city], [Places.name, Places.city]) place = db.relationship('Places', backref='concerts') concert_date = db.Column(db.Date, nullable=False) tour = db.Column(db.String, nullable=True) db.PrimaryKeyConstraint(band_name, place_name, place_city, concert_date) @staticmethod def create(performer, place, concert_date): concert = Concerts(performer=performer, place=place, concert_date=concert_date) db.session.add(concert) db.session.commit() return concert
class Albums(db.Model): __tablename__ = 'albums' band_name = db.Column(db.String, db.ForeignKey('bands.name'), nullable=False) band = db.relationship('Bands', backref='albums') name = db.Column(db.String, nullable=False) genre_name = db.Column(db.String, db.ForeignKey('genres.name'), nullable=True) genre = db.relationship('Genres', backref='genre') awards = db.relationship('Awards', secondary=receptions_table, backref=db.backref('awarded_albums', lazy='dynamic')) db.PrimaryKeyConstraint(band_name, name) @staticmethod def create(name, band, genre=None): album = Albums(band=band, name=name, genre=genre) db.session.add(album) db.session.commit() return album def add_songs(self, titles): if isinstance(titles, str): return Songs.create(titles, self) if isinstance(titles, list): songs = [] for title in titles: song = Songs.create(title, self) songs.append(song) return songs
class Musicians(db.Model): __tablename__ = 'musicians' name = db.Column(db.String, primary_key=True) band_name = db.Column(db.String, db.ForeignKey('bands.name'), nullable=False) instrument_type = db.Column(db.String, db.ForeignKey('instruments.type'), nullable=False) instrument = db.relationship('Instruments', backref='players') @staticmethod def create(name, band, instrument): musician = Musicians( name=name, band=band, instrument=instrument, ) db.session.add(musician) db.session.commit() return musician
class Genres(db.Model): __tablename__ = 'genres' name = db.Column(db.String, primary_key=True) supergenre_name = db.Column(db.String, db.ForeignKey('genres.name'), nullable=True) supergenre = db.relationship('Genres', remote_side=name, backref=db.backref('subgenres')) @staticmethod def create(name, supergenre=None): g_name = None if not supergenre else supergenre.name genre = Genres(name=name, supergenre_name=g_name) db.session.add(genre) db.session.commit() return genre
from concertina.app import db from datetime import date, timedelta appearances_table = db.Table( 'appearances', db.Column('band_name', db.String, db.ForeignKey('bands.name')), db.Column('festival_name', db.String), db.Column('festival_date', db.Date), db.ForeignKeyConstraint(['festival_name', 'festival_date'], ['festivals.name', 'festivals.date_start'])) receptions_table = db.Table( 'award_receptions', db.Column('album_name', db.String), db.Column('album_band_name', db.String), db.Column('award_name', db.String, db.ForeignKey('awards.name')), db.ForeignKeyConstraint(['album_name', 'album_band_name'], ['albums.name', 'albums.band_name'])) class Bands(db.Model): __tablename__ = 'bands' name = db.Column(db.String, primary_key=True) formation_date = db.Column(db.Date, nullable=True) members = db.relationship('Musicians', backref='band') concerts = db.relationship('Concerts', backref='performer') festivals = db.relationship('Festivals', secondary=appearances_table, backref=db.backref('bands', lazy='dynamic')) @staticmethod def create(name, formation_date=None):