From 1b6b0d6c127792ec0cab3a34b6a83b9453931606 Mon Sep 17 00:00:00 2001 From: Sandra Date: Sun, 10 Dec 2023 18:09:41 +0300 Subject: [PATCH] Completed assignment --- lib/models.py | 64 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/lib/models.py b/lib/models.py index 2681bee5a..6cd4d5b34 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,29 +1,61 @@ -from sqlalchemy import ForeignKey, Column, Integer, String, MetaData +from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base -convention = { - "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", -} -metadata = MetaData(naming_convention=convention) - -Base = declarative_base(metadata=metadata) +# Set up SQLAlchemy engine and Base +engine = create_engine('sqlite:///freebies.db') +Base = declarative_base() +# Define the models class Company(Base): __tablename__ = 'companies' - id = Column(Integer(), primary_key=True) - name = Column(String()) - founding_year = Column(Integer()) + id = Column(Integer, primary_key=True) + name = Column(String) + founding_year = Column(Integer) + + def give_freebie(self, dev, item_name, value): + new_freebie = Freebie(dev=dev, company=self, item_name=item_name, value=value) + # Add the new freebie to the session and commit the changes + session.add(new_freebie) + session.commit() + + @classmethod + def oldest_company(cls): + return session.query(cls).order_by(cls.founding_year).first() - def __repr__(self): - return f'' class Dev(Base): __tablename__ = 'devs' - id = Column(Integer(), primary_key=True) - name= Column(String()) + id = Column(Integer, primary_key=True) + name = Column(String) + + def received_one(self, item_name): + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, other_dev, freebie): + if freebie in self.freebies: + freebie.dev = other_dev + session.commit() + + +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')) + + dev = relationship('Dev', backref='freebies') + company = relationship('Company', backref='freebies') + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}" + + +# Create tables in the database +Base.metadata.create_all(engine) - def __repr__(self): - return f''