From 438815d3fee5479c99ac7f3a3c3b56cdcd4e44c4 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 17 Apr 2023 11:24:22 -0400 Subject: [PATCH] finnished lab --- lib/freebies.db | Bin 20480 -> 28672 bytes .../3a473256e6ac_created_freebie_table.py | 33 +++++++++++++++ ...ed2_modified_tables_to_add_relationship.py | 38 ++++++++++++++++++ lib/models.py | 22 ++++++++++ lib/seed.py | 38 +++++++++++++++++- lib/seed_db.db | 0 6 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 lib/migrations/versions/3a473256e6ac_created_freebie_table.py create mode 100644 lib/migrations/versions/7f0468678ed2_modified_tables_to_add_relationship.py create mode 100644 lib/seed_db.db diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..c4c862d0c39a49d7030756a20b4ee13fb775169d 100644 GIT binary patch delta 460 zcmZozz}WDBae}m*=fAIfc;-A>q&%*zMv1X#9SbbAG8@sryEMu!+Nn%n?YFbfhYEouuF^pz+ z4svx2aa9O$bnWae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ e#dk}P$285{DB08^Db2(pd6U8yeiVU41_}U7@f6zt diff --git a/lib/migrations/versions/3a473256e6ac_created_freebie_table.py b/lib/migrations/versions/3a473256e6ac_created_freebie_table.py new file mode 100644 index 000000000..b63c1db17 --- /dev/null +++ b/lib/migrations/versions/3a473256e6ac_created_freebie_table.py @@ -0,0 +1,33 @@ +"""Created Freebie Table + +Revision ID: 3a473256e6ac +Revises: 5f72c58bf48c +Create Date: 2023-04-13 12:56:43.701612 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '3a473256e6ac' +down_revision = '5f72c58bf48c' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebies', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('item_name', sa.String(), nullable=True), + sa.Column('value', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('freebies') + # ### end Alembic commands ### diff --git a/lib/migrations/versions/7f0468678ed2_modified_tables_to_add_relationship.py b/lib/migrations/versions/7f0468678ed2_modified_tables_to_add_relationship.py new file mode 100644 index 000000000..2a750ae3d --- /dev/null +++ b/lib/migrations/versions/7f0468678ed2_modified_tables_to_add_relationship.py @@ -0,0 +1,38 @@ +"""modified tables to add relationship + +Revision ID: 7f0468678ed2 +Revises: 3a473256e6ac +Create Date: 2023-04-13 13:43:07.954324 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '7f0468678ed2' +down_revision = '3a473256e6ac' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('freebies', schema=None) as batch_op: + batch_op.add_column(sa.Column('company_id', sa.Integer(), nullable=True)) + batch_op.add_column(sa.Column('dev_id', sa.Integer(), nullable=True)) + batch_op.create_foreign_key(batch_op.f('fk_freebies_company_id_companies'), 'companies', ['company_id'], ['id']) + batch_op.create_foreign_key(batch_op.f('fk_freebies_dev_id_devs'), 'devs', ['dev_id'], ['id']) + + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('freebies', schema=None) as batch_op: + batch_op.drop_constraint(batch_op.f('fk_freebies_dev_id_devs'), type_='foreignkey') + batch_op.drop_constraint(batch_op.f('fk_freebies_company_id_companies'), type_='foreignkey') + batch_op.drop_column('dev_id') + batch_op.drop_column('company_id') + + # ### end Alembic commands ### diff --git a/lib/models.py b/lib/models.py index 2681bee5a..a4740e210 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,5 +1,6 @@ from sqlalchemy import ForeignKey, Column, Integer, String, MetaData from sqlalchemy.orm import relationship, backref +from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.declarative import declarative_base convention = { @@ -16,6 +17,10 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebies', backref=backref('company')) + devs = association_proxy('freebies', 'dev', + creator=lambda us: Freebies(dev=us)) + def __repr__(self): return f'' @@ -25,5 +30,22 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship('Freebies', backref=backref('dev')) + companies = association_proxy('freebies', 'company', + creator=lambda us: Freebies(company=us)) + def __repr__(self): return f'' + +class Freebies(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String()) + value = Column(Integer()) + + company_id = Column(Integer(), ForeignKey('companies.id')) + dev_id = Column(Integer(), ForeignKey('devs.id')) + + def __repr__(self): + return f'' diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..830bf5591 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,39 @@ #!/usr/bin/env python3 -# Script goes here! +from random import choice as rc + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from models import Dev, Company, Freebies + +engine = create_engine('sqlite:///seed_db.db') +Session = sessionmaker(bind=engine) +session = Session() + +def delete_records(): + session.query(Dev).delete() + session.query(Company).delete() + session.query(Freebies).delete() + session.commit() + +def create_records(): + companies = [Company() for i in range(500)] + devs = [Dev() for i in range(500)] + freebies = [Freebies() for i in range(1000)] + session.add_all(companies + devs + freebies) + session.commit() + return companies, devs, freebies + +def relate_one_to_many(devs, companies, freebies): + for freebie in freebies: + freebie.dev = rc(devs) + freebie.company = rc(companies) + + session.add_all(freebies) + session.commit() + +if __name__ == '__main__': + delete_records() + devs, companies, freebies = create_records() + relate_one_to_many(devs, companies, freebies) diff --git a/lib/seed_db.db b/lib/seed_db.db new file mode 100644 index 000000000..e69de29bb