Skip to content

Instantly share code, notes, and snippets.

@pawl
Created August 21, 2015 23:53
Show Gist options
  • Save pawl/14e6ca2dcdf0435925af to your computer and use it in GitHub Desktop.
Save pawl/14e6ca2dcdf0435925af to your computer and use it in GitHub Desktop.
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
# Create application
app = Flask(__name__)
# Create dummy secrey key so we can use sessions
app.config['SECRET_KEY'] = '123456790'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///a_sample_database.sqlite'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
class Person(db.Model):
__tablename__ = 'person'
uid = Column(Integer, primary_key=True)
username = Column(String(20), nullable=False, unique=True)
def __str__(self):
return self.username
class Magazine(db.Model):
__tablename__ = 'magazine'
mid = Column(Integer, primary_key=True)
title = Column(String(80), nullable=False, index=True)
def __str__(self):
return self.title
class Subscription(db.Model):
__tablename__ = 'subscription'
subid = Column(Integer, primary_key=True)
uid = Column(ForeignKey('person.uid', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
mid = Column(ForeignKey('magazine.mid', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, index=True)
notes = Column(String(140), nullable=False)
# need this to display in child tables (e.g. sub_schedule)
def __str__(self):
return self.notes
class SubscriptionSchedule(db.Model):
__tablename__ = 'subscription_schedule'
schedid = Column(Integer, primary_key=True)
# The deletion also fails when you remove the CASCADE
subid = Column(ForeignKey('subscription.subid', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
notes = Column(String(140), nullable=False)
subscription = relationship('Subscription', backref='subschedule')
def __str__(self):
return self.notes
if __name__ == '__main__':
db.drop_all()
db.create_all()
db.session.add(Person(uid=1, username='Joe'))
db.session.add(Person(uid=2, username='Ann'))
db.session.add(Magazine(mid=1, title='Time'))
db.session.add(Magazine(mid=2, title='Newsweek'))
db.session.commit()
subscription_1 = Subscription(uid=1, mid=1, subid=1, notes='Joe subscribed to Time' )
db.session.add(subscription_1)
subscription_2 = Subscription(uid=2, mid=2, subid=2, notes='Ann subscribed to Newsweek' )
db.session.add(subscription_2)
db.session.commit()
db.session.add(SubscriptionSchedule(schedid=1, subid=1, notes="Joe's Time subscription has a schedule" ))
db.session.commit()
db.session.delete(subscription_1)
db.session.commit()
# Start app
app.run(debug=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment