From 83e7689dc069dd5148f08cc082dda905035d291e Mon Sep 17 00:00:00 2001 From: toxidity-18 Date: Tue, 24 Sep 2024 08:49:54 +0300 Subject: [PATCH] fu --- lib/debug.py | 32 ++++++++++++++++++++++++++------ lib/models.py | 33 +++++++++++++++++++++++++++++++-- lib/seed.py | 30 ++++++++++++++++++++++++++++-- 3 files changed, 85 insertions(+), 10 deletions(-) diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..07a8bc415 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,29 @@ -#!/usr/bin/env python3 - from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from models import Base, Company, Dev, Freebie + +# Set up the engine and session +engine = create_engine('sqlite:///freebie_tracker.db') +Session = sessionmaker(bind=engine) +session = Session() + +# Test cases +company = session.query(Company).first() +dev = session.query(Dev).first() + +# Create a new freebie +company.give_freebie(dev, "Cap", 5) + +# Find the oldest company +print(Company.oldest_company()) + +# Dev receives freebie +print(dev.received_one("Cap")) -from models import Company, Dev +# Dev gives away freebie +dev.give_away(dev, session.query(Freebie).first()) -if __name__ == '__main__': - engine = create_engine('sqlite:///freebies.db') - import ipdb; ipdb.set_trace() +# Print details of a freebie +freebie = session.query(Freebie).first() +print(freebie.print_details()) diff --git a/lib/models.py b/lib/models.py index 2681bee5a..573316cfd 100644 --- a/lib/models.py +++ b/lib/models.py @@ -2,28 +2,57 @@ from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base +# Define a naming convention for foreign keys to avoid conflicts. convention = { "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", } metadata = MetaData(naming_convention=convention) +# Create a declarative base with the metadata. Base = declarative_base(metadata=metadata) +# Company model with a relationship to Freebie. class Company(Base): __tablename__ = 'companies' id = Column(Integer(), primary_key=True) - name = Column(String()) + name = Column(String(), nullable=False) founding_year = Column(Integer()) + # One-to-Many relationship with Freebie. + freebies = relationship('Freebie', back_populates='company') + def __repr__(self): return f'' +# Dev model with a relationship to Freebie. class Dev(Base): __tablename__ = 'devs' id = Column(Integer(), primary_key=True) - name= Column(String()) + name = Column(String(), nullable=False) + + # One-to-Many relationship with Freebie. + freebies = relationship('Freebie', back_populates='dev') def __repr__(self): return f'' + +# Freebie model with foreign keys to Dev and Company. +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String(), nullable=False) + value = Column(Integer()) + + # Foreign keys to reference Dev and Company. + dev_id = Column(Integer(), ForeignKey('devs.id')) + company_id = Column(Integer(), ForeignKey('companies.id')) + + # Relationships to link Freebie back to Dev and Company. + dev = relationship('Dev', back_populates='freebies') + company = relationship('Company', back_populates='freebies') + + def __repr__(self): + return f'' diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..5867331f7 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,29 @@ -#!/usr/bin/env python3 +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from models import Base, Company, Dev, Freebie + +# Set up the engine and session +engine = create_engine('sqlite:///freebie_tracker.db') +Session = sessionmaker(bind=engine) +session = Session() + +# Drop and recreate all tables +Base.metadata.drop_all(engine) +Base.metadata.create_all(engine) + +# Seed data +company1 = Company(name="Tech Corp", founding_year=2001) +company2 = Company(name="Web Solutions", founding_year=2005) +dev1 = Dev(name="Alice") +dev2 = Dev(name="Bob") + +freebie1 = Freebie(item_name="T-shirt", value=15, company=company1, dev=dev1) +freebie2 = Freebie(item_name="Mug", value=10, company=company2, dev=dev2) +freebie3 = Freebie(item_name="Sticker", value=2, company=company1, dev=dev2) + +session.add_all([company1, company2, dev1, dev2, freebie1, freebie2, freebie3]) +session.commit() + +print("Database seeded!") -# Script goes here!