Skip to content
Snippets Groups Projects
Commit 9c17bb0b authored by Christopher Bohn's avatar Christopher Bohn :thinking:
Browse files

added many-to-many without extra payload

parent 4daf672f
No related branches found
No related tags found
No related merge requests found
......@@ -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,19 +25,22 @@ 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')
orders = relationship('Order', uselist=True, secondary='order_items', back_populates='items')
# # # If there isn't any extra payload in the join table, there's no need to explicitly mention it
class Order(Persisted):
__tablename__ = 'orders'
order_id = Column(Integer, primary_key=True)
timestamp = Column(DateTime)
items = relationship('Item', uselist=True, secondary='order_items', back_populates='orders')
class OrderItem(Persisted):
__tablename__ = 'order_items'
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)
class DinerDatabase(object):
......
......@@ -15,7 +15,7 @@ def add_starter_data(session):
orange_juice = Item(menu=beverage_menu, name='Orange Juice', price=149)
short_stack = Item(menu=food_menu, name='Pancakes', price=399)
regular_pancakes = Item(menu=food_menu, name='Pancakes', price=499)
first_order = Order(order_items=[OrderItem(item=orange_juice, amount=2)])
first_order = Order(items=[orange_juice])
session.add(beverage_menu)
session.add(food_menu)
session.add(orange_juice)
......@@ -26,17 +26,21 @@ def add_starter_data(session):
def main():
try:
url = DinerDatabase.construct_mysql_url('localhost', 3306, 'diner', 'root', 'cse1208')
url = DinerDatabase.construct_mysql_url('localhost', 33060, 'diner', 'root', 'cse1208')
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.')
the_order: Order = session.query(Order).filter(Order.order_id == 1).one()
print([item.name for item in the_order.items])
orange_juice: Item = session.query(Item).filter(Item.name == 'Orange Juice').one()
print([order.order_id for order in orange_juice.orders])
except SQLAlchemyError as exception:
print('Database setup failed!', file=stderr)
print(f'Cause: {exception}', file=stderr)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment