From ffe3b0183fb2a0aede0b3d7a901492a12d575838 Mon Sep 17 00:00:00 2001 From: swarui Date: Fri, 8 Dec 2023 20:36:40 +0300 Subject: [PATCH] Completed Assignment --- lib/migrations/versions/debug.py | 30 +++++++++++++++++ lib/migrations/versions/freebies.db | 0 lib/migrations/versions/models.py | 50 +++++++++++++++++++++++++++++ lib/migrations/versions/seed.py | 29 +++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 lib/migrations/versions/debug.py create mode 100644 lib/migrations/versions/freebies.db create mode 100644 lib/migrations/versions/models.py create mode 100644 lib/migrations/versions/seed.py diff --git a/lib/migrations/versions/debug.py b/lib/migrations/versions/debug.py new file mode 100644 index 000000000..face1bfe6 --- /dev/null +++ b/lib/migrations/versions/debug.py @@ -0,0 +1,30 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Base, Company, Dev, Freebie + +if __name__ == '__main__': + engine = create_engine('sqlite:///freebies.db') + Base.metadata.bind = engine + DBSession = sessionmaker(bind=engine) + session = DBSession() + + # Test relationships and methods here + company = session.query(Company).first() + print("==============Company Freebies:===================") + for freebie in company.get_freebies(): + print(f"Item: {freebie.item_name}, Value: {freebie.value}") + + print("\n==============Company Devs:=====================") + for dev in company.get_devs(): + print(dev.name) + + dev = session.query(Dev).first() + print("\n==============Dev Freebies:======================") + for freebie in dev.get_freebies(): + print(f"Item: {freebie.item_name}, Value: {freebie.value}") + + print("\n==============Dev Companies:======================") + for company in dev.get_companies(): + print(company.name) + + session.close() \ No newline at end of file diff --git a/lib/migrations/versions/freebies.db b/lib/migrations/versions/freebies.db new file mode 100644 index 000000000..e69de29bb diff --git a/lib/migrations/versions/models.py b/lib/migrations/versions/models.py new file mode 100644 index 000000000..1069c6aaf --- /dev/null +++ b/lib/migrations/versions/models.py @@ -0,0 +1,50 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() + +class Company(Base): + __tablename__ = 'companies' + + id = Column(Integer, primary_key=True) + name = Column(String) + founding_year = Column(Integer) + freebies = relationship('Freebie', backref='company') + + def __repr__(self): + return f'' + + def get_freebies(self): + return self.freebies + + def get_devs(self): + return list({freebie.dev for freebie in self.freebies}) + +class Dev(Base): + __tablename__ = 'devs' + + id = Column(Integer, primary_key=True) + name = Column(String) + freebies = relationship('Freebie', backref='dev') + + def __repr__(self): + return f'' + + def get_freebies(self): + return self.freebies + + def get_companies(self): + return list({freebie.company for freebie in self.freebies}) + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer, primary_key=True) + item_name = Column(String) + value = Column(Integer) + dev_id = Column(Integer, ForeignKey('devs.id')) + company_id = Column(Integer, ForeignKey('companies.id')) + + def __repr__(self): + return f'' \ No newline at end of file diff --git a/lib/migrations/versions/seed.py b/lib/migrations/versions/seed.py new file mode 100644 index 000000000..c61f3a5c4 --- /dev/null +++ b/lib/migrations/versions/seed.py @@ -0,0 +1,29 @@ + +#!/usr/bin/env python3 + +# Script goes here! +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Base, Company, Dev, Freebie + +if __name__ == '__main__': + engine = create_engine('sqlite:///freebies.db') + Base.metadata.create_all(engine) + + Session = sessionmaker(bind=engine) + session = Session() + + # Create sample data + company1 = Company(name='Safaricom', founding_year=2000) + company2 = Company(name='Google', founding_year=1995) + + dev1 = Dev(name='Mark Mwangi') + dev2 = Dev(name='Steve Maina') + + freebie1 = Freebie(item_name='Macbook Pro', value=10, dev=dev1, company=company1) + freebie2 = Freebie(item_name='Logitech MX', value=20, dev=dev2, company=company2) + + session.add_all([company1, company2, dev1, dev2, freebie1, freebie2]) + session.commit() + + session.close() \ No newline at end of file