diff --git a/diet.py b/diet.py index e4b2b7641312fa795753e8f6ed1d174deb2f4e2c..2f9ca48bd776e4dc2d990ccc6f4c86d791712f1a 100644 --- a/diet.py +++ b/diet.py @@ -6,6 +6,40 @@ from sqlalchemy.orm import sessionmaker, relationship Persisted = declarative_base() # pylint: disable=invalid-name +class User(Persisted): + __tablename__ = 'users' + user_id = Column(Integer, primary_key=True) + name = Column(String(256), nullable=False) + meals = relationship('Meal', uselist=True, back_populates='user') + + +class Meal(Persisted): + __tablename__ = 'meals' + meal_id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey('users.user_id', ondelete='CASCADE'), nullable=False) + timestamp = Column(DateTime, nullable=False) + user = relationship('User', back_populates='meals') + meal_food_types = relationship('MealFoodType', uselist=True, back_populates='meal') + food_types = relationship('FoodType', uselist=True, secondary='meal_food_types', back_populates='meals') + + +class FoodType(Persisted): + __tablename__ = 'food_types' + food_type_id = Column(Integer, primary_key=True) + name = Column(String(256), nullable=False) + meal_food_types = relationship('MealFoodType', uselist=True, back_populates='food_type') + meals = relationship('Meal', uselist=True, secondary='meal_food_types', back_populates='food_types') + + +class MealFoodType(Persisted): + __tablename__ = 'meal_food_types' + meal_id = Column(Integer, ForeignKey('meals.meal_id', ondelete='CASCADE'), primary_key=True) + food_type_id = Column(Integer, ForeignKey('food_types.food_type_id', ondelete='CASCADE'), primary_key=True) + amount = Column(Integer, nullable=False) + meal = relationship('Meal', back_populates='meal_food_types') + food_type = relationship('FoodType', back_populates='meal_food_types') + + class DietDatabase(object): @staticmethod def construct_mysql_url(authority, port, database, username, password): diff --git a/diet_installer.py b/diet_installer.py index 10f9abcdb1d1fce8ec4f21970d746828d21a9e44..8a86890325abc849b596c1f51f18365ff025fa07 100644 --- a/diet_installer.py +++ b/diet_installer.py @@ -4,17 +4,21 @@ from sqlalchemy.exc import SQLAlchemyError from datetime import datetime -from diet import DietDatabase +from diet import DietDatabase, User, FoodType, Meal, MealFoodType def add_starter_data(session): - pass + ada = User(name='Ada') + pancakes = FoodType(name='Pancakes') + meal = Meal(user=ada, meal_food_types=[MealFoodType(food_type=pancakes, amount=3)], timestamp=datetime.now()) + session.add(meal) def main(): try: url = DietDatabase.construct_mysql_url('localhost', 3306, 'diet', 'root', 'cse') diner_database = DietDatabase(url) + diner_database.ensure_tables_exist() print('Tables created.') session = diner_database.create_session()