diff --git a/Pipfile b/Pipfile index 63c79cd98..c4f6857f6 100644 --- a/Pipfile +++ b/Pipfile @@ -4,13 +4,11 @@ verify_ssl = true name = "pypi" [packages] -alembic = "1.8.1" -importlib-metadata = "6.0.0" -importlib-resources = "5.10.0" -ipdb = "0.13.9" -sqlalchemy = "1.4.42" +sqlalchemy = "*" +psycopg2 = "*" +# Add other dependencies as needed [dev-packages] [requires] -python_full_version = "3.8.13" +python_version = "3.8" diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..3cc389703 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,18 @@ -#!/usr/bin/env python3 - from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Base, User, Post + +engine = create_engine('postgresql://username:password@localhost/database_name') +Base.metadata.create_all(engine) + +Session = sessionmaker(bind=engine) +session = Session() -from models import Company, Dev +# Query data +users = session.query(User).all() +for user in users: + print(f'User ID: {user.id}, Username: {user.username}') + for post in user.posts: + print(f' Post ID: {post.id}, Title: {post.title}, Content: {post.content}') -if __name__ == '__main__': - engine = create_engine('sqlite:///freebies.db') - import ipdb; ipdb.set_trace() +session.close() diff --git a/lib/models.py b/lib/models.py index 2681bee5a..0cef5491a 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,29 +1,19 @@ -from sqlalchemy import ForeignKey, Column, Integer, String, MetaData -from sqlalchemy.orm import relationship, backref +from sqlalchemy import create_engine, Column, Integer, String, ForeignKey +from sqlalchemy.orm import relationship 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) - -class Company(Base): - __tablename__ = 'companies' - - id = Column(Integer(), primary_key=True) - name = Column(String()) - founding_year = Column(Integer()) - - def __repr__(self): - return f'' - -class Dev(Base): - __tablename__ = 'devs' - - id = Column(Integer(), primary_key=True) - name= Column(String()) - - def __repr__(self): - return f'' +Base = declarative_base() + +class User(Base): + __tablename__ = 'users' + id = Column(Integer, primary_key=True) + username = Column(String, unique=True) + posts = relationship("Post", back_populates="author") + +class Post(Base): + __tablename__ = 'posts' + id = Column(Integer, primary_key=True) + title = Column(String) + content = Column(String) + author_id = Column(Integer, ForeignKey('users.id')) + author = relationship("User", back_populates="posts") diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..641dc3feb 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,23 @@ #!/usr/bin/env python3 -# Script goes here! +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Base, User, Post + +engine = create_engine('postgresql://username:password@localhost/database_name') +Base.metadata.create_all(engine) + +Session = sessionmaker(bind=engine) +session = Session() + +# Seed data +user1 = User(username="user1") +user2 = User(username="user2") + +post1 = Post(title="Post 1", content="Content of Post 1", author=user1) +post2 = Post(title="Post 2", content="Content of Post 2", author=user2) + +session.add_all([user1, user2, post1, post2]) +session.commit() + +session.close()