diff --git a/diner.py b/diner.py index c0ad745f0d539da4ec00b956cd2a8734c160aa0c..517b68269266e8557ee8d6332de91a43e99019c1 100644 --- a/diner.py +++ b/diner.py @@ -15,6 +15,7 @@ class Menu(Persisted): __tablename__ = 'menus' menu_id = Column(Integer, primary_key=True) # primary keys default to auto_increment name = Column(String(256), nullable=False) # nullable is the default + items = relationship('Item', uselist=True, back_populates='menu') class Item(Persisted): @@ -24,12 +25,17 @@ class Item(Persisted): menu_id = Column(Integer, ForeignKey('menus.menu_id', ondelete='CASCADE'), nullable=False) name = Column(String(256), nullable=False) price = Column(Integer, nullable=False) + menu = relationship('Menu', back_populates='items') + order_items = relationship('OrderItem', uselist=True, back_populates='item') + orders = relationship('Order', uselist=True, secondary='order_items') class Order(Persisted): __tablename__ = 'orders' order_id = Column(Integer, primary_key=True) timestamp = Column(DateTime) + order_items = relationship('OrderItem', uselist=True, back_populates='order') + items = relationship('Item', uselist=True, secondary='order_items') class OrderItem(Persisted): @@ -37,6 +43,8 @@ class OrderItem(Persisted): order_id = Column(Integer, ForeignKey('orders.order_id', ondelete='CASCADE'), primary_key=True) item_id = Column(Integer, ForeignKey('items.item_id', ondelete='CASCADE'), primary_key=True) amount = Column(Integer) + item = relationship('Item', back_populates='order_items') + order = relationship('Order', back_populates='order_items') class DinerDatabase(object): diff --git a/diner_installer.py b/diner_installer.py index cbca8115e873b5e33e1f46a7befb0427243f300c..a39e145385074cb2a429feb9fe7cde20a9a282be 100644 --- a/diner_installer.py +++ b/diner_installer.py @@ -30,13 +30,13 @@ def main(): diner_database = DinerDatabase(url) diner_database.ensure_tables_exist() print('Tables created.') - # session = diner_database.create_session() - # if already_has_data(session): - # print('Not creating records because some already exist.') - # else: - # add_starter_data(session) - # session.commit() - # print('Records created.') + session = diner_database.create_session() + if already_has_data(session): + print('Not creating records because some already exist.') + else: + add_starter_data(session) + session.commit() + print('Records created.') except SQLAlchemyError as exception: print('Database setup failed!', file=stderr) print(f'Cause: {exception}', file=stderr)