Skip to content

Instantly share code, notes, and snippets.

Created June 29, 2016 16:28
Show Gist options
  • Save anonymous/54226fbe793b5eb4aae28ad9c2a8116e to your computer and use it in GitHub Desktop.
Save anonymous/54226fbe793b5eb4aae28ad9c2a8116e to your computer and use it in GitHub Desktop.
Drinks Sqla
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///drinks.db'
db = SQLAlchemy(app)
class DrinkIngredient(db.Model):
id = db.Column(db.Integer, primary_key=True)
ingredient_id = db.Column(db.Integer, db.ForeignKey('ingredient.id'))
drink_id = db.Column(db.Integer, db.ForeignKey('drink.id'))
ingredient = db.relationship("Ingredient", uselist=False)
drink = db.relationship("Drink", uselist=False)
units = db.Column(db.Float)
def __repr__(self):
return '<DrinkIngredient %f units of %s>' % (self.units, self.drink.name)
class Drink(db.Model):
__tablename__ = 'drink'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), index=True, unique=True)
Ingredients = db.relationship('DrinkIngredient')
def __init__(self, name):
self.name = name
def __repr__(self):
return '<Drink %r>' % (self.name)
class Ingredient(db.Model):
__tablename__ = 'ingredient'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(140))
def __init__(self, name):
self.name = name
def __repr__(self):
return '<Ingredient %r>' % (self.name)
from flask_script import Manager, Shell
from app import db, app, Drink, Ingredient, DrinkIngredient
manager = Manager(app)
def make_shell_context():
return dict(db=db, Drink=Drink, Ingredient=Ingredient, DrinkIngredient=DrinkIngredient)
manager.add_command('shell', Shell(make_context=make_shell_context))
if __name__ == '__main__':
manager.run()
In [1]: i1 = Ingredient(name='Orange Juice')

In [2]: i2 = Ingredient(name='Tequila')

In [3]: di1 = DrinkIngredient(ingredient=i1, units=2)

In [4]: di1
Out[4]: <DrinkIngredient 2.000000 units of Orange Juice>

In [5]: di2 = DrinkIngredient(ingredient=i2, units=1)

In [6]: di2
Out[6]: <DrinkIngredient 1.000000 units of Tequila>

In [7]: d = Drink(name='Tequila Sunrise')

In [8]: d.Ingredients.append([di1, di2])

In [9]: d.Ingredients.append(di1)

In [10]: d.Ingredients.append(di2)

In [11]: d
Out[11]: <Drink 'Tequila Sunrise'>

In [12]: d.Ingredients
Out[12]: 
[<DrinkIngredient 2.000000 units of Orange Juice>,
 <DrinkIngredient 1.000000 units of Tequila>]
@Fisherworks
Copy link

the #18 line is now -
return '<DrinkIngredient %f units of %s>' % (self.units, self.drink.name)
should be
return '<DrinkIngredient %f units of %s>' % (self.units, self.ingredient.name)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment